簡體   English   中英

為什么 POSIX 整理相關的括號符號比反斜杠具有更高的優先級?

[英]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.

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