它可能是一个愚蠢的错误,但我有一个正则表达式应该匹配
但不是以数字
开头的字符串这是代码
preg_match('~^[A-Za-z][A-Za-z0-9]*(\[(?P<array>"(?:.*(?:(?<!\\)(?>\\\\)*\").*|.*)+(?:(?<!\\)(?>\\\\)*"))\]|\[\]|)$~',trim($item[0]," \r"),$matches)
但是当我执行它时,我收到错误Compilation failed: missing ) at offset 95
当我执行它时here它运行正常吗?
代码有什么问题?
更新
可读的正则表达式:
~
^
[A-Za-z]
[A-Za-z0-9]*
(
\[
(?P<array>
"
(?:
.*
(?:
(?<!\\)
(?>\\\\)*
\"
)
.*
|
.*
)+
(?:
(?<!\\)
(?>\\\\)*
"
)
)
\]
|
\[\]
|
)$
~x
答案 0 :(得分:13)
这个正则表达式很疯狂。我很难相信你真的需要这么复杂的一个。
无论如何,问题是PHP正在使用PHP字符串的反斜杠。所以你必须用另一个反斜杠来逃避所有反斜杠。
考虑到你已经拥有的反斜杠的数量,你可能会有点疯狂。
答案 1 :(得分:0)
我同意正则表达式看起来很难看。但是,要使其编译,您只需要更改
的两个实例(?<!\\)(?>\\\\)*
到
(?<!\\\\)(?>\\\\\\\\)*
和两者
但我不相信这个正则表达式可靠地工作。我的口味太多.*
。