根据Stack OverFlow上的以下answer:
(?=。* foo)(?=。* baz)
这说正则表达式foo必须出现在任何地方,baz必须出现在任何地方,不一定按顺序,可能重叠。
此正则表达式应匹配 foo 和 baz :
Where foo have baz all my life
然而,这不起作用。也不是regexr也不是regexpal.com。
答案 0 :(得分:1)
Lookarounds只是与任何单个字符都不匹配的断言。
(?=.*foo)(?=.*baz)
断言匹配将要发生的行必须包含foo
和baz
个字符串。我建议你使用锚点和上面的外观。
^(?=.*foo)(?=.*baz)
这是存在于一行开头的边界。
上述正则表达式有用吗?
当您想要打印字符串foo
和baz
出现的整行时,此功能非常有用。
在js中,你可以写
/^(?=.*foo)(?=.*baz)/m.test(string);
答案 1 :(得分:1)
您需要在foo
和baz
周围创建一个捕获组,因为环视不是捕获组,而是断言。
前瞻本身不是捕获组。它不包括在对反向引用进行编号的计数中。 如果要将正则表达式的匹配存储在前瞻中,则必须在前瞻中的正则表达式周围放置捕获括号,如下所示:(?=(regex))。反过来说不起作用,因为在捕获组存储匹配时,前瞻已经丢弃了正则表达式匹配。
http://www.regular-expressions.info/lookaround.html
制作正则表达式:
(?=.+?(foo))(?=.+?(baz))
请注意前瞻中的捕获组。
答案 2 :(得分:0)
如果您只需要两个字符串,则可以执行以下操作:
(XXX * YYY。)|(YYY * XXX)
它将在两个订单的同一行中搜索XXX和YYY。
可能效率不高但很简单且有效。