正则表达式以在一行上彼此匹配两个单词

问题描述 投票:0回答:6

嗨,我正在尝试构建一个正则表达式(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

任何帮助将不胜感激!

regex pcre
6个回答
0
投票

怎么样

\btree\b[^\n]+\bhouse\b

0
投票

只需添加否定的前瞻即可匹配所有非单词字符,但不能匹配换行符。

(?i)(?:\b(tree)\b)(?:(?!\n)\W)+(?:\w+\W+){0,5}?\b(house)\b.*

DEMO


0
投票

点与换行符不匹配,所以:

(?i)\btree\b.{1,5}\bhouse\b

请注意,两个单词之间不可能有零个字符,因为那样的话它们就不会是两个单词-它们将是一个单词,而\b将不匹配。


0
投票

只需将正则表达式中的\W替换为[^\w\r\n]

(?i)(?:\b(tree)\b)[^\w\r\n]+(?:\w+[^\w\r\n]+){0,5}?\b(house)\b.*

0
投票

要获得同一行上两个单词的最接近匹配,可以选择使用负数lookahead

(?i)(\btree\b)(?>(?!(?1)).)*?\bhouse\b
  • .点默认与换行符不匹配(仅使用s DOTALL修饰符)
  • [(?>(?!(?1)).)*?尽可能少的字符,后跟\btree\b
  • [(?1)粘贴第一个括号内的图案。

Example at regex101.com; Regex FAQ


0
投票

也许这会有所帮助,在https://www.regular-expressions.info/near.html中找到

\bword1\W+(?:\w+\W+){1,6}?word2\b.    
© www.soinside.com 2019 - 2024. All rights reserved.