簡體   English   中英

正則表達式匹配不是我所期望的

[英]regex match is not as i expect

在下面給出的匹配項中:為什么第一個匹配項給出了輸出...,而在第二個匹配項中,為什么'-'與目標不匹配?

Index: 01234567890123456789012345678
Target: whois who? Who me? Who else?
Pattern: (^[a-z])|(\?$)
Match: (0,0:w)(28,28:?)

Index: 01234567890
Target: \-^$.?*+()|
Pattern: [\\-^$.?*+()|]
Match: (0,0:\)(2,2:^)(3,3:$)(4,4:.)(5,5:?)(6,6:*)(7,7:+)(8,8:()(9,9:))(10,10:|)

編輯:-

感謝您詢問代碼

請在此處找到代碼: http : //paste.ubuntu.com/11831819/

第一個匹配行/字符串^[az]開頭的任何字符,以及行/字符串\\?$末尾的問號,這是因為

  • ^表示行首
  • $表示行尾

在第二個字符中, []表示匹配集合中的字符, -內部表示“之間”,因此匹配其ascii值介於\\ (具有ascii值92)和^ (具有ascii值94)之間的字符,或$。* +()|之一 由於的ASCII值-是46,也不會被顯示。

要解決您的問題,您應該引用-

[\\\-^$.?*+()|]

或放在最后

[\\^$.?*+()|-]

當然這是重擊,但是:

echo 'begin []\^$.?*+()|- end' | sed -e 's/[][\\^$.?*+()|-]/x/g'
begin xxxxxxxxxxxxx end

我只引用\\ ,所有特殊字符均已替換為x ,因為所有其他字符都放置在正確的位置。 如果我移動-[]我也必須引用它們。

暫無
暫無

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

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