簡體   English   中英

正則表達式匹配不以==開頭的所有行

[英]Regex to match all lines not starting with ==

這應該很簡單,但是我遇到了麻煩。 我想在perl中寫一個正則表達式來匹配所有不以“ ==”開頭的行。 我創建了這個表達式:

^ [^ \\ = \\ =]。*

在我使用的正則表達式測試器中可以正常工作,但是當我運行perl腳本時,出現錯誤消息:

POSIX語法[= =]保留用於正則表達式中的將來擴展

腳本終止。 我以為我使用的語法錯誤,但是我對此一無所獲。 有誰有更好的方法來匹配這些線?

您的正則表達式是不正確的,例如,由於它以=A作為輸入而失敗。 一種方法是使用Perl兼容的正則表達式(PCRE): ^(?!==)

您誤會了字符類在正則表達式中的工作方式

字符類是用方括號分隔[...]一般將匹配它包圍的任何一個字符。 因此[abc]將匹配abc ,但僅匹配aacbc的第一個字符。 您可能知道您也可以使用range ,例如[ac]

您也可以像這樣對否定類進行否定 ,因此[^a]將匹配不是 a任何字符,例如z& ,但僅匹配zz的第一個字符

在類中復制字符不會更改其匹配項,因此[aardvark]將完全匹配adkrv ,並且等效於[adkrv]

您的正則表達式模式使用字符類[^\\=\\=] 不必轉義等號,並且對其進行復制沒有任何作用,因此您具有等價的[^=] ,它將匹配等號=以外的任何單個字符

收到該錯誤消息的原因是,字符類以[=和結束=] (只是[=]不計算在內)保留給尚未實現的特殊行為。 如上所述,通常無需編寫多次出現相同字符的字符類,因此合理的做法是禁止這樣的構造

perldoc perldiag有這個話要說

POSIX語法[= =]保留用於正則表達式中的將來擴展。 以<-HERE標記,以m /%s /

(F)在正則表達式字符類([])中,以“ [=”開頭和以“ =]結尾”的語法保留給以后的擴展。 如果需要在正則表達式字符類中表示這些字符序列,只需在方括號中加上反斜杠:“ [=“和” =]“。 <-HERE在正則表達式中顯示發現問題的行蹤。 參見perlre

一個解決方案取決於您想在Perl代碼中使用測試的方式,但是如果您需要if語句,那么我將簡單地反轉測試並檢查該行不是==開頭

unless ( /^==/ )

或者,如果您對Perl過敏, unless

if ( not /^==/ )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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