我的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));
第二个参数是true
或false
。我也做了这个正则表达式,但问题仍然存在:
test_function[(].+[,](true|false).+[)]
如何为此搜索编写Regex?
您似乎只想匹配包含至少2个参数的test_function
的出现,第一个参数是单引号PHP字符串文字或带有字符串文字作为第一个段的嵌套函数,以及可选的true
或false
参数。
这意味着您可以使用Eclipse中的正则表达式解决问题,因为您不需要匹配任意递归级别。使用
test_function\((?!\w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\)|'[^'\\]*(?:\\.[^'\\]*)*'\))
细节
test_function\(
- 文字test_function(
(?!
- 如果在当前位置的右边立即有......那么开始一个未通过比赛的负向前瞻\w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\)
- 一系列字符:
\w+
- 一个或多个单词字符(方法名称)
\('
- 一个('
子串
[^'\\]*
- 比\
和'
零或更多的字符
(?:\\.[^'\\]*)*
- 任何逃逸序列的零个或多个序列(\\.
匹配\
和其后的任何字符)后跟零个或多个字符比\
和'
'
- 单引号
(?:,(?:true|false))*
- 其后的,
和true
或false
值的0+序列
\)\)
- 一个))
子串|
- 或'[^'\\]*(?:\\.[^'\\]*)*'\)
- 单引号字符串文字和)
之后)
- 前瞻的结束。假设第一个参数不能包含“)”,则可以使用
test_function[(][^)]+[,][^)]+[)]
如果可能有括号,你将不得不寻找它们的对,它们可以通过正则表达式完成。即它有可能但很难看。 如果您需要帮助,请提供更多样本输入。