正则表达式和运算符不工作

时间:2015-06-11 13:32:50

标签: regex

根据Stack OverFlow上的以下answer

  

(?=。* foo)(?=。* baz)

  这说正则表达式foo必须出现在任何地方,baz必须出现在任何地方,不一定按顺序,可能重叠。

此正则表达式应匹配 foo baz

Where foo have baz all my life

然而,这不起作用。也不是regexr也不是regexpal.com

3 个答案:

答案 0 :(得分:1)

Lookarounds只是与任何单个字符都不匹配的断言。

(?=.*foo)(?=.*baz) 

断言匹配将要发生的行必须包含foobaz个字符串。我建议你使用锚点和上面的外观。

^(?=.*foo)(?=.*baz)

这是存在于一行开头的边界。

  

上述正则表达式有用吗?

当您想要打印字符串foobaz出现的整行时,此功能非常有用。

在js中,你可以写

/^(?=.*foo)(?=.*baz)/m.test(string);

答案 1 :(得分:1)

您需要在foobaz周围创建一个捕获组,因为环视不是捕获组,而是断言。

  

前瞻本身不是捕获组。它不包括在对反向引用进行编号的计数中。 如果要将正则表达式的匹配存储在前瞻中,则必须在前瞻中的正则表达式周围放置捕获括号,如下所示:(?=(regex))。反过来说不起作用,因为在捕获组存储匹配时,前瞻已经丢弃了正则表达式匹配。

http://www.regular-expressions.info/lookaround.html

制作正则表达式:

(?=.+?(foo))(?=.+?(baz))

请注意前瞻中的捕获组。

https://regex101.com/r/rS8sK6/1

答案 2 :(得分:0)

如果您只需要两个字符串,则可以执行以下操作:

(XXX * YYY。)|(YYY * XXX)

它将在两个订单的同一行中搜索XXX和YYY。

可能效率不高但很简单且有效。