显然有效的正则表达式不适用于php((\\\\ | \\\ |)| [^ \\\ |])*?

时间:2012-03-02 00:30:36

标签: php regex

我正在编写非常复杂的正则表达式并使用Rubular editor对其进行测试,几个小时后我意识到它在PHP中不起作用。

这只是较长的正则表达式模式的一小部分:

((\\\\|\\\|)|[^\\\|])*?

我必须在以下条件下使用马克思字符串。

  1. 字符串可能包含仅|转义的\|个字符。
  2. 字符串可能包含仅\转义的\\个字符。
  3. 字符串可能为空。
  4. 这意味着像

    这样的字符串
    test
    test\\
    test\|
    t\\e\|s\|\|t\\\\\\\\\\
    

    正确,以及

    等字符串
    test\
    test|\
    \
    |
    test\\\\|
    

    NOT CORRECT

    此外,Rubular接受[^\\\|][^\|\\](相同)。 PHP不适用于[^\|\\]。为什么呢?

    这是我看不到的东西,因为我认为这两个字符都已正确转义,但PHP不同意我。

    See this example in Rubular

    我仍然是这个正则表达式的新手,所以不要怪我的愚蠢。

    提前致谢!

1 个答案:

答案 0 :(得分:4)

在PHP中引用时,你需要双重转义\。

regex = "/((\\\\\\\\|\\\\\\|)|[^\\\\\\|])*?/";