您好我正在尝试构建一个正则表达式(PCRE),它能够在彼此附近找到两个单词,但它们出现在同一行上。通常提供的近示例不足以满足我的要求,因为“\ W”显然包括新行。我花了很多时间试图找到答案,但到目前为止还没有成功。为了举例说明我目前的情况,请参阅以下内容:
(?i)(?:\b(tree)\b)\W+(?:\w+\W+){0,5}?\b(house)\b.*
我想要匹配:
here is a tree with a house
但不匹配
here is a tree
with a house
非常感谢任何帮助!
答案 0 :(得分:0)
怎么样
\btree\b[^\n]+\bhouse\b
答案 1 :(得分:0)
答案 2 :(得分:0)
Dot匹配除换行符之外的任何内容,所以只需:
(?i)\btree\b.{1,5}\bhouse\b
请注意,两个单词之间不可能有零个字符,因为它们不会是两个单词 - 它们将是一个单词而\b
不会匹配。
答案 3 :(得分:0)
在正则表达式中将\W
替换为[^\w\r\n]
:
(?i)(?:\b(tree)\b)[^\w\r\n]+(?:\w+[^\w\r\n]+){0,5}?\b(house)\b.*
答案 4 :(得分:0)
要在同一行中获得两个单词的最接近匹配,选项是使用否定lookahead:
(?i)(\btree\b)(?>(?!(?1)).)*?\bhouse\b
.
点默认值与换行符不匹配(仅限s
DOTALL修饰符)(?>(?!(?1)).)*?
尽可能少的任何字符,\btree\b
(?1)
粘贴第一个带括号的模式。答案 5 :(得分:0)
也许有帮助,在https://www.regular-expressions.info/near.html
\bword1\W+(?:\w+\W+){1,6}?word2\b.