正则表达式前瞻(或后面)匹配foo bar或bar foo

时间:2011-11-02 23:31:12

标签: regex

我希望匹配foo bar baz bar baz foofoo可以处于任何一个位置,但必须存在。我不太熟悉前瞻,并且看后面,但我觉得必须要做到这一点。有什么提示吗?

4 个答案:

答案 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)