我希望匹配foo bar baz
或 bar baz foo
。 foo
可以处于任何一个位置,但必须存在。我不太熟悉前瞻,并且看后面,但我觉得必须要做到这一点。有什么提示吗?
答案 0 :(得分:1)
可能有一种更简洁的方法,但以下情况应该有效:
/^(?=.*foo)(foo )?bar baz( foo)?$/
http://www.rubular.com/r/7wEVNi5G1Q
或者,您可以使用|
来匹配一个选项或另一个选项:
/foo bar baz|bar baz foo/
答案 1 :(得分:1)
由于bar baz可能实际上是复杂的,我至少想为更复杂的案例建议一个更清晰的解决方案:构建正则表达式:
$foo = 'foo'
$barbaz = 'bar baz'
$regex = "($foo $barbaz)|($barbaz $foo)"
转换为您选择的语言;)当我看到完全写出的url或电子邮件的正则表达式时,我总是感到惊讶,为什么不构建它,这样它就可以保持可调试...
答案 2 :(得分:0)
这可能听起来“太简单了”,但是这个怎么样?
(foo bar baz|bar baz foo)
答案 3 :(得分:0)
(foo bar baz|bar baz foo)
可以使用,比使用前瞻或后视更容易阅读。
评论后编辑:
(foo (bar|baz)|(bar|baz) foo)