我当前的正则表达式匹配函数名称和传递给函数see here
的变量名称 正则表达式 - (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
工作答案 0 :(得分:1)
您可以在PHP中使用带有子例程调用的正则表达式:
'~(file_exists|is_file)(\(((?>[^()]++|(?2))*)\))~'
请参阅regex demo
模式匹配:
(file_exists|is_file)
- 两种选择之一(\(((?>[^()]++|(?2))*)\))
- 第1组匹配已配对的嵌套(...)
子字符串,((?>[^()]++|(?2))*)
为第3组,捕获外部配对(...)
内的内容。因此,结果如下:
is_file
(str_replace(array(), array(), strtolower($file)))
str_replace(array(), array(), strtolower($file))
使用第1组和第3组。