簡體   English   中英

Perl正則表達式與不需要的模式匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM