preg_match"编译失败:丢失)"

Eat*_*ode 3 php regex preg-match

它可能是一个愚蠢的错误,但我有一个正则表达式应该匹配

  • allalaa
  • afkdsf []
  • afadf43fds [ "guyish"]

但不是以数字开头的字符串

这是代码

preg_match('~^[A-Za-z][A-Za-z0-9]*(\[(?P<array>"(?:.*(?:(?<!\\)(?>\\\\)*\").*|.*)+(?:(?<!\\)(?>\\\\)*"))\]|\[\]|)$~',trim($item[0],"    \r"),$matches)
Run Code Online (Sandbox Code Playgroud)

但是当我执行它时,我得到了错误 Compilation failed: missing ) at offset 95

当我在这里执行它时工作正常吗?

什么错误的代码?

UPDATE

可读的正则表达式:

~
   ^
   [A-Za-z]
   [A-Za-z0-9]*
   (
      \[
      (?P<array>
      "
      (?:
          .*
          (?:
             (?<!\\)
             (?>\\\\)*
             \"
           )
           .*
        |
           .*
        )+
        (?:
           (?<!\\)
           (?>\\\\)*
           "
         )
       )
       \]
     |
     \[\]
     |
   )$
~x
Run Code Online (Sandbox Code Playgroud)

Ari*_*iel 14

这个正则表达式是疯了.我很难相信你真的需要这么复杂的一个.

无论如何,问题是PHP正在使用PHP字符串的反斜杠.所以你必须用另一个反斜杠来逃避所有的反斜杠.

考虑到你已经拥有的反斜杠的数量,你可能会有点疯狂.

另见:倾斜牙签综合症

  • 维基百科的链接很棒.从来不知道有名字.这么好的一个甚至:) (3认同)