不能让Regex在PHP中工作,在RegEXP程序中工作

Nic*_*ams 0 php regex preg-replace

这是我正在搜索的输入:

\u003cspan class=\"prs\">email_address@me.com\u003c\/span>
Run Code Online (Sandbox Code Playgroud)

试着返回email_address@me.com.

我的正则表达式在RegExp中class=\\"prs\\">(.*?)\\返回"class=\"prs\">email_address@me.com\",这是好的,我可以使用该结果.

但我不能让它在PHP中工作.

$regex = "/class=\\\"prs\\\">(.*?)\\/";
Run Code Online (Sandbox Code Playgroud)

给我一个错误"没有结束分隔符"

有人可以帮忙吗?

Spu*_*ley 5

你原来的代码:

$regex = "/class=\\\"prs\\\">(.*?)\\/";
Run Code Online (Sandbox Code Playgroud)

你得到的原因No ending delimiter是虽然你在结束正斜杠之前逃避了反斜杠,你所做的是在PHP字符串的上下文中转义它,而不是在正则表达式引擎的上下文中.

因此PHP字符串转义机制可以实现它的功能,当正则表达式引擎获取它时,它将如下所示:

/class=\"prs\">(.*?)\/
Run Code Online (Sandbox Code Playgroud)

这意味着正则表达式引擎将在表达式末尾看到反斜杠,以转义您打算用来关闭表达式的正斜杠.

对于这种事情,通常的PHP解决方案是切换到使用单引号字符串而不是双引号字符串,但这仍然不起作用,因为\\单引号和双引号字符串中的转义反斜杠.

您需要做的是将字符串末尾的反斜杠字符数加倍,因此您的代码需要如下所示:

$regex = "/class=\\\"prs\\\">(.*?)\\\\/";
Run Code Online (Sandbox Code Playgroud)

证明它正在做什么的方法是打印$regex变量的内容,这样你就可以看到字符串对正则表达式引擎的影响.实际上很难发现这些类型的错误,但查看字符串的实际内容将有助于您发现它们.

希望有所帮助.

  • 很难解释一个难以解释的问题.+1. (2认同)