[英]Why is POSIX collating-related bracketed symbol higher-precedence than backslash?
POSIX,又名“The Open Group Base Specifications Issue 7, 2018 edition” ,關於正則表達式運算符優先級有這樣的說法:
9.4.8 ERE 優先級
優先順序如下表所示:
ERE 優先級(從高到低) 歸類相關的括號符號 [==] [::] [..]
轉義字符 \
特殊字符括號表達式 []
分組 ()
單字符 ERE 復制 * +? {m,n}
級聯 ab 錨定 ^ $
交替 |
我很好奇前兩個級別按此順序排列的原因。 作為 unix 的老用戶,我習慣於“在它前面加一個反斜杠”來逃避幾乎任何事情。 但似乎使用 Collation-Related-Bracket-Symbols (CRBS),我無法做到這一點。 如果我想匹配文字[.ch.]
,我不能只鍵入\[.ch.]
並依靠“點匹配點”來為我處理事情。 我現在必須匹配[[].ch.]
類的東西(或者可能更糟?)。
我正在嘗試,但失敗了,想象當任何想到這個的人決定這應該是命令時的場景。 是否存在讓 CRBS 排名高於反斜杠有意義的具體場景,或者這是“我們還不了解 CRBS,所以讓我們將其設置為更高優先級”的情況,或者......究竟是什么?
至少對於 Gnu grep,它看起來像 lib/dfa.c 將 CRBS 視為一個詞法標記,根據 function parse_bracket_exp()
。
對於給出的示例,escaping 特殊字符(方括號和點)似乎可以提供您要查找的結果。 您還可以將文字點與[.]
匹配,這在正則表達式中可能更容易看到。
$ (echo c;echo '[.ch.]';echo .ch.;echo xchx)|grep '\[\.ch\.\]'
[.ch.]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.