嗨,我正在尝试构建一个正则表达式(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
任何帮助将不胜感激!
怎么样
\btree\b[^\n]+\bhouse\b
点与换行符不匹配,所以:
(?i)\btree\b.{1,5}\bhouse\b
请注意,两个单词之间不可能有零个字符,因为那样的话它们就不会是两个单词-它们将是一个单词,而\b
将不匹配。
只需将正则表达式中的\W
替换为[^\w\r\n]
:
(?i)(?:\b(tree)\b)[^\w\r\n]+(?:\w+[^\w\r\n]+){0,5}?\b(house)\b.*
要获得同一行上两个单词的最接近匹配,可以选择使用负数lookahead:
(?i)(\btree\b)(?>(?!(?1)).)*?\bhouse\b
.
点默认与换行符不匹配(仅使用s
DOTALL修饰符)(?>(?!(?1)).)*?
尽可能少的字符,后跟\btree\b
(?1)
粘贴第一个括号内的图案。也许这会有所帮助,在https://www.regular-expressions.info/near.html中找到
\bword1\W+(?:\w+\W+){1,6}?word2\b.