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

问题描述 投票:2回答:2

我的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?

php regex
2个回答
1
投票

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

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

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

regex demo

细节

  • test_function\( - 文字test_function(
  • (?! - 如果在当前位置的右边立即有......那么开始一个未通过比赛的负向前瞻
  • \w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\) - 一系列字符: \w+ - 一个或多个单词字符(方法名称) \(' - 一个('子串 [^'\\]* - 比\'零或更多的字符 (?:\\.[^'\\]*)* - 任何逃逸序列的零个或多个序列(\\.匹配\和其后的任何字符)后跟零个或多个字符比\' ' - 单引号 (?:,(?:true|false))* - 其后的,truefalse值的0+序列 \)\) - 一个))子串
  • | - 或
  • '[^'\\]*(?:\\.[^'\\]*)*'\) - 单引号字符串文字和)之后
  • ) - 前瞻的结束。

1
投票

假设第一个参数不能包含“)”,则可以使用

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

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

© www.soinside.com 2019 - 2024. All rights reserved.