繁体   English   中英

如何将配对的右括号与正则表达式匹配

[英]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_filestr_replace(array('olddir'), array('newdir'), strtolower($file)

有没有办法匹配下一个右括号,除非一个已经打开?

我想让它在regex101 上工作

您可以在 PHP 中使用带有子例程调用的正则表达式:

'~(file_exists|is_file)(\(((?>[^()]++|(?2))*)\))~'

查看正则表达式演示

模式匹配:

  • (file_exists|is_file) - 两种选择之一
  • (\\(((?>[^()]++|(?2))*)\\)) - 第 1 组匹配的成对嵌套(...)子字符串,和((?>[^()]++|(?2))*)是第 3 组捕获外部配对(...)内的内容。

因此,结果是:

  • 第 1 组: is_file
  • 第 2 组: (str_replace(array(), array(), strtolower($file)))
  • 第 3 组: str_replace(array(), array(), strtolower($file))

使用第 1 组和第 3 组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM