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)
给我一个错误"没有结束分隔符"
有人可以帮忙吗?
你原来的代码:
$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变量的内容,这样你就可以看到字符串对正则表达式引擎的影响.实际上很难发现这些类型的错误,但查看字符串的实际内容将有助于您发现它们.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |