[英]How to match paired closing bracket with regex
我当前的正则表达式匹配函数名和传递给函数的变量名,请参见此处
正则表达式- (file_exists|is_file)\\(([^)]+)
字符串if (is_file($file)){
匹配is_file
和$file
我还希望正则表达式使用字符串而不仅仅是变量名称,这包括带有多个左括号和右括号的字符串。
这是一个极端的例子。
正则表达式- (file_exists|is_file)\\(????????)
字符串if (is_file(str_replace(array('olddir'), array('newdir'), strtolower($file))){
匹配is_file
和str_replace(array('olddir'), array('newdir'), strtolower($file)
有没有办法匹配下一个右括号,除非一个已经打开?
我想让它在regex101 上工作
您可以在 PHP 中使用带有子例程调用的正则表达式:
'~(file_exists|is_file)(\(((?>[^()]++|(?2))*)\))~'
查看正则表达式演示
模式匹配:
(file_exists|is_file)
- 两种选择之一(\\(((?>[^()]++|(?2))*)\\))
- 第 1 组匹配的成对嵌套(...)
子字符串,和((?>[^()]++|(?2))*)
是第 3 组捕获外部配对(...)
内的内容。因此,结果是:
is_file
(str_replace(array(), array(), strtolower($file)))
str_replace(array(), array(), strtolower($file))
使用第 1 组和第 3 组。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.