PHP 正则表达式(如果存在转义括号)

标签 php regex escaping

在 PHP 中,我试图完成一个简单的任务,即使用 preg_match_all

从字符串中提取一些信息

我有一个像这样的字符串,例如0(a)1(b)2(c)3(d)4(e)5(f)

我试图返回每个 () 内的所有内容,但要尊重这些内容内可能存在转义括号的事实。

我尝试了多种组合,但我无法获得任何正则表达式来允许类似 4(here are some escaped parens\(\) more text) 返回此 这里有一些转义的括号\(\)更多文本而不是这个这里有一些转义的括号\(\)

我有一个可以使用的正则表达式,但不能使用转义括号

[0-9]*\(([^转义括号])*?\)

有人可以告诉我如何实现这一目标吗?

最佳答案

您可以使用 negative look behind使您的正则表达式引擎仅匹配前面不带反斜杠的右括号:

\((.+?)(?<!\\)\)

查看演示 https://regex101.com/r/oU9sF2/1

Regular expression visualization

Debuggex Demo

关于PHP 正则表达式(如果存在转义括号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33289132/

相关文章:

regex - 提取字符串的版本号

R:匹配奇数次重复

javascript - 如何查找以 # 开头的行,但有异常(exception)

php - 如何使用jquery Ajax传递表单数据以将数据插入数据库?

php - Symfony2 FOSUserBundle 注册角色异常

php - 如何使用 php 安全地传递 paypal API 凭据(以及为什么这不被认为是安全的)

c# - 如何匹配字符串的一部分并拒绝整个字符串?

javascript - Escape String - 在 Javascript 中输出 rails 字符串

html - HTML 属性编码/转义与常规 HTML 编码有何不同?

php - 在 100 个文件中的 </body> 标签前批量插入代码