[英]Regex to match all lines not starting with ==
這應該很簡單,但是我遇到了麻煩。 我想在perl中寫一個正則表達式來匹配所有不以“ ==”開頭的行。 我創建了這個表達式:
^ [^ \\ = \\ =]。*
在我使用的正則表達式測試器中可以正常工作,但是當我運行perl腳本時,出現錯誤消息:
POSIX語法[= =]保留用於正則表達式中的將來擴展
腳本終止。 我以為我使用的語法錯誤,但是我對此一無所獲。 有誰有更好的方法來匹配這些線?
您的正則表達式是不正確的,例如,由於它以=A
作為輸入而失敗。 一種方法是使用Perl兼容的正則表達式(PCRE): ^(?!==)
您誤會了字符類在正則表達式中的工作方式
字符類是用方括號分隔[...]
一般將匹配它包圍的任何一個字符。 因此[abc]
將匹配a
, b
或c
,但僅匹配aa
或cbc
的第一個字符。 您可能知道您也可以使用range ,例如[ac]
您也可以像這樣對否定類進行否定 ,因此[^a]
將匹配不是 a
任何字符,例如z
或&
,但僅匹配zz
的第一個字符
在類中復制字符不會更改其匹配項,因此[aardvark]
將完全匹配a
, d
, k
, r
或v
,並且等效於[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.