我是Perl编程的新手,请帮帮我。
我要搜索模式并对其进行修改, 模式是
FATAL_ERROR(TRACE_ERROR, "any format string", arguments);
这是我搜索模式的方式
while(/(FATAL_ERROR\s*\(\s*([A-Za-z0-9_\s\|\(\).\[\]]+)[\\,\s]+((\".*?\"\s*\\*\s*)*)[^"]*?;)/sgm)
但问题是,脚本开始匹配正则表达式
MACSIM_FATAL_ERROR(TRACE_ERROR, "format string", arguments);
请建议我解决。
答案 0 :(得分:1)
通过添加^字符
将搜索锚定到从行首开始匹配while(/(^FATAL_ERROR\s*(\s*([A-Za-z0-9_\s\|().[]]+)[\,\s]+((\".?\"\s\*\s*))[^"]?;)/sgm)
答案 1 :(得分:1)
您只需在正则表达式前面添加单词边界\b
。
while (/(\bFATAL_ERROR\s*\(\s*([A-Za-z0-9_\s\|\(\).\[\]]+)[\\,\s]+((\".*?\"\s*\\*\s*)*)[^"]*?;)/sgm)
如果你想要更具限制性,比如使用^
锚定到字符串的开头,你可以这样做。但以上就是你需要确保FATAL_ERROR
是一个有限的词。
注意:没有分析你的正则表达式的其余部分,虽然我怀疑它可以简化/改进。
答案 2 :(得分:0)
如果它不是该行的第一个项目,但在字符串前面有空格(基于user1717159答案),则为空格添加匹配项(\ s +):
while(/(^\s+FATAL_ERROR\s*(\s*([A-Za-z0-9_\s\|().[]]+)[\,\s]+((\".?\"\s\*\s*))[^"]?;)/sgm)
匹配空格或是否可以添加条件来检查违规字符串,例如:
while((/(^\s+FATAL_ERROR\s*(\s*([A-Za-z0-9_\s\|().[]]+)[\,\s]+((\".?\"\s\*\s*))[^"]?;)/sgm) &&
( ! /MACSIM_FATAL_ERROR/ ))