[英]Posix regular expression non capturing group
我正在linux下用C編寫一個簡單的shell。 我正在嘗試使用帶有組捕獲的 POSIX 正則表達式來解析用戶輸入。 我的問題是我不想捕獲所有組,但是 ?: 符號 desnt 似乎對我有用。
"^(?:[A-Za-z0-9]+)( [A-Za-z0-9]*(?:\"[^\"]*\")*(?:\'[^\']*\')*[A-Za-z0-9]*)*&?$"
POSIX 正則表達式中不允許使用(?:..)
或任何其他分組前綴。
字符序列(?
根據第9.4.3 節 ERE 特殊字符未定義:
*+?{
<asterisk>
、<plus-sign>
、<question-mark>
和<left-brace>
應該是特殊的,除非在括號表達式中使用(參見 RE 括號表達式)。 以下任何用途都會產生未定義的結果:
如果這些字符首先出現在 ERE 中,或者緊跟在未轉義的
<vertical-line>
、<circumflex>
、<dollar-sign>
或<left-parenthesis>
之后如果
<left-brace>
不是有效區間表達式的一部分(請參閱 EREs Matching Multiple Characters)
POSIX RE 實現對於如何處理未定義的語法有幾個選擇。 這些選擇包括根據第9.1 節正則表達式定義啟用擴展語法。 因此可以自由地實現非捕獲組語法:
[...] 違反 RE 的指定語法或語義會產生未定義的結果:這可能會導致錯誤,啟用該 RE 的擴展語法,或者使用錯誤的構造作為要匹配的文字字符。
如果您希望將該功能視為未來 POSIX 標准的一部分,您可以在標准的問題跟蹤器上打開一個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.