3

正则表达式问题:如果两个单词同时出现在一行中,是否可以匹配 - 但如果它们相隔超过三个单词,则不能匹配?

示例:match 和 apart 应该在“我尝试将单词分开匹配不成功”和“我尝试将两个单词分开匹配不成功”中匹配,但不在“我尝试将三个或更多单词分开匹配不成功”中匹配

谢谢。

4

3 回答 3

2

每个词都可以用类似的东西来定义\w+\s

最多可以写成三个字(\w+\s){0,3}

所以你的正则表达式可能看起来像

/match\s(\w+\s){0,3}apart/
于 2012-11-11T11:48:05.283 回答
1

这应该有效:

match\s+(\S+\s){,2}apart

\s是一个空白字符并且\S是一个非空白字符。对于单行方面,您可能希望更改\s[^\S\n\r]as \sdoes 还包含换行符\n\r.

于 2012-11-11T11:48:19.323 回答
0

当然。尽管这取决于您如何定义单词。比如说,您只会将字母视为单词,而将所有非字母视为分隔符:

firstword[^a-zA-Z\r\n]+(?:[a-zA-Z]+[^a-zA-Z\r\n]+){0,2}secondword

[a-zA-Z]是任何字母字符。[^a-zA-Z\s]任何非字母、非换行符。这就是它的全部内容。

于 2012-11-11T11:47:20.440 回答