[英]Perl Regular expression matching with unwanted pattern
我是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);
請給我建議任何解決方案。
通過添加^字符將您的搜索錨定到匹配行的開頭
while(/(^FATAL_ERROR\s*(\s*([A-Za-z0-9_\s\|().[]]+)[\,\s]+((\".?\"\s\*\s*))[^"]?;)/sgm)
您只需要在正則表達式前面添加單詞邊界\\b
。
while (/(\bFATAL_ERROR\s*\(\s*([A-Za-z0-9_\s\|\(\).\[\]]+)[\\,\s]+((\".*?\"\s*\\*\s*)*)[^"]*?;)/sgm)
如果您想更具限制性,例如使用^
錨定到字符串的開頭,則可以這樣做。 但是以上就是確保FATAL_ERROR
是一個有界詞的全部操作。
注意:雖然我懷疑可以簡化/改進它,但並未分析其余的正則表達式。
如果它不是該行的第一項,但是在字符串之前有空格(基於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/ ))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.