通过Regex查找带有第二个参数的所有函数

时间:2017-08-26 20:00:00

标签: php regex

我的PHP项目中有一个名为test_function的函数。多次打电话。我想找到具有第二个参数的所有test_function。像:

test_function('something',true);
//or
test_function('something',false);
//or
test_function('something',true,true);
//or
test_function(another_function('anotherthing',true),true);

不想找到这个:

test_function('something');

我正在使用启用了正则表达式的Eclipse搜索。用这个:

test_function[(].+[,].+[)]

但它会搜索我不想要的东西。像这样:

test_function('something').another_function(something,true);
//or
test_function(another_function('anotherthing',true));

第二个参数是truefalse。我也做了这个正则表达式,但问题仍然存在:

test_function[(].+[,](true|false).+[)]

如何为此搜索编写Regex?

2 个答案:

答案 0 :(得分:1)

假设第一个参数不能包含")"你可以用

test_function[(][^)]+[,][^)]+[)]

如果可能有括号,你将不得不寻找它们的对,它们到达了可以用正则表达式做的边界。即它有可能但很难看 如果您需要帮助,请提供更多样本输入。

答案 1 :(得分:1)

您似乎只想匹配包含至少2个参数的test_function的出现次数,第一个参数是单引号PHP字符串文字或带有字符串文字作为第一个字段的嵌套函数,以及可选的truefalse其他参数。

这意味着您可以使用Eclipse中的正则表达式解决问题,因为您不需要匹配任意递归级别。使用

test_function\((?!\w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\)|'[^'\\]*(?:\\.[^'\\]*)*'\))

请参阅regex demo

<强>详情

  • test_function\( - 文字test_function(
  • (?! - 如果在当前位置的右侧立即显示未通过匹配的否定前瞻,则启动......
  • \w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\) - 一系列字符:
    • \w+ - 一个或多个单词字符(方法名称)
    • \(' - (' subnstring
    • [^'\\]* - 除\'
    • 之外的零个或多个字符
    • (?:\\.[^'\\]*)* - 任何转义序列的零个或多个序列(\\.匹配\及其后的任何字符)后跟零个或多个字符,而不是\和{ {1}}
    • ' - 单引号
    • ' - 其后(?:,(?:true|false))*,true值的0 +序列
    • false - \)\)子字符串
  • )) - 或
  • | - 单引号字符串文字和'[^'\\]*(?:\\.[^'\\]*)*'\)之后
  • ) - 前瞻的结束。