Php 预赛;编译失败:丢失)“;

Php 预赛;编译失败:丢失)“;,php,regex,preg-match,Php,Regex,Preg Match,这可能是一个愚蠢的错误,但我有一个正则表达式应该匹配什么 阿拉拉 afkdsf[] afadf43fds[“guyish”] 但不是以数字开头的字符串 这是密码 preg_match('~^[A-Za-z][A-Za-z0-9]*(\[(?P<array>"(?:.*(?:(?<!\\)(?>\\\\)*\").*|.*)+(?:(?<!\\)(?>\\\\)*"))\]|\[\]|)$~',trim($item[0]," \r"),$matches

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

  • 阿拉拉
  • afkdsf[]
  • afadf43fds[“guyish”]
但不是以数字开头的字符串

这是密码

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

这个正则表达式太疯狂了。我很难相信你真的需要这么复杂的

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

考虑到你已经有很多反斜杠,你可能会有点发疯


另请参见:

我同意正则表达式看起来很难看。不过,要使其进行编译,只需更改

(?<!\\)(?>\\\\)*
(?\ \ \)*

(?)*
两者都有


但我不相信这个正则表达式能可靠地工作。太多的
*
s不合我的口味。

Regex:现在你有两个问题。您无法判断此代码的错误是因为它已变得不可读。做点什么来提高可读性,你也会找到解决方案。@j0k类似于
gdsg[“hello”]
的维基百科链接非常棒。不知道那有名字。这是一个很好的例子:)@eaterofcasters你最终会得到“只写代码”。另一个维基百科链接:
(?<!\\)(?>\\\\)*
(?<!\\\\)(?>\\\\\\\\)*