perl 匹配特殊字元

2021-07-02 14:05:07 字數 929 閱讀 8868

上面三條正規表示式都隱藏著另乙個陷阱。假如使用者輸入的是字串hello :-),就會導致嚴重的執行時錯誤。變數內插後得到的實際正規表示式會從/($pat)/變為/(hello :-))/,不光是毫無意義,連括號也不對稱了。perl會報告正規表示式錯在**:

unmatched ) in regex; marked by <-- here in

m/(hello :-)) <-- here /

這種問題我們可以用qr//解決(見條款40)。

對於括號、星號、點號之類的特殊字元,如果不想把它們作為正規表示式元字元使用,可以借助quotemeta操作符,或是轉義操作符\q。quotemeta和\q會在任何不是字母、數字及下劃線的字元之前加上反斜線作轉義處理。

下面的**從標準輸入讀取字串,使用quotemeta將字元中的特殊字元轉義,然後再用於匹配。如果輸入仍舊是hello :-),那麼轉義後會變為hello\ \:\-\),可以放心地用這個正規表示式進行匹配了。

chomp( $pat = );

my $quoted = quotemeta $pat;

print "matched\n" if /($quoted)/;

或者,直接在表示式中使用轉義操作符\q和\e :

chomp( $pat = );

print "matched\n"

if /(\q$pat\e)/

; 跟使用正規表示式的其他語法結構一樣,一點點疏忽都可能造成正規表示式崩潰:

# 它實際上相當於/hello \ \:\-\)\/,顯然這是乙個致命錯誤

print "matched\n" if /(\q$pat)/; # 錯誤!漏掉了\e

3. 要點

 要留意正規表示式的優先順序。

 可以使用圓括號將正規表示式分組。

 使用\q或quotemeta將元字元轉義為普通字元。

hivesql 匹配特殊轉義字元

如果需要用like來匹配字串中的特殊字元,eg.需要對其做轉義,否則會當做正則表達被處理。hive select channel from test a?bc a bc a.bc hive select channel from test where channel like a?bc hive s...

perl特殊變數

perl特殊變數總結,供查詢 一 正規表示式 特殊變數 1 n 包含上次模式匹配的第n個子串 2 前一次成功模式匹配的字串 3 前次匹配成功的子串之前的內容 4 前次匹配成功的子串之後的內容 5 前一次使用括號的模式匹配的字串.二 檔案控制代碼 特殊變數 1 如果設定為零,在每次呼叫函式write或...

perl 模式匹配

一 簡介 模式指在字串中尋找的特定序列的字元,由反斜線包含 def 即模式def。其用法如結合函式split將字串用某模式分成多個單詞 array split line 二 匹配操作符 檢驗匹配是否成功 result var abc 若在該字串中找到了該模式,則返回非零值,即true,不匹配則返回0...