我的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?
答案 0 :(得分:1)
假设第一个参数不能包含")"你可以用
test_function[(][^)]+[,][^)]+[)]
如果可能有括号,你将不得不寻找它们的对,它们到达了可以用正则表达式做的边界。即它有可能但很难看 如果您需要帮助,请提供更多样本输入。
答案 1 :(得分:1)
您似乎只想匹配包含至少2个参数的test_function
的出现次数,第一个参数是单引号PHP字符串文字或带有字符串文字作为第一个字段的嵌套函数,以及可选的true
或false
其他参数。
这意味着您可以使用Eclipse中的正则表达式解决问题,因为您不需要匹配任意递归级别。使用
test_function\((?!\w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\)|'[^'\\]*(?:\\.[^'\\]*)*'\))
请参阅regex demo
<强>详情
test_function\(
- 文字test_function(
(?!
- 如果在当前位置的右侧立即显示未通过匹配的否定前瞻,则启动...... \w+\('[^'\\]*(?:\\.[^'\\]*)*'(?:,(?:true|false))*\)\)
- 一系列字符:
\w+
- 一个或多个单词字符(方法名称)\('
- ('
subnstring [^'\\]*
- 除\
和'
(?:\\.[^'\\]*)*
- 任何转义序列的零个或多个序列(\\.
匹配\
及其后的任何字符)后跟零个或多个字符,而不是\
和{ {1}} '
- 单引号'
- 其后(?:,(?:true|false))*
和,
或true
值的0 +序列false
- \)\)
子字符串))
- 或|
- 单引号字符串文字和'[^'\\]*(?:\\.[^'\\]*)*'\)
之后)
- 前瞻的结束。