簡體   English   中英

Posix 正則表達式非捕獲組

[英]Posix regular expression non capturing group

我正在linux下用C編寫一個簡單的shell。 我正在嘗試使用帶有組捕獲的 POSIX 正則表達式來解析用戶輸入。 我的問題是我不想捕獲所有組,但是 ?: 符號 desnt 似乎對我有用。

"^(?:[A-Za-z0-9]+)( [A-Za-z0-9]*(?:\"[^\"]*\")*(?:\'[^\']*\')*[A-Za-z0-9]*)*&?$"

POSIX 正則表達式中不允許使用(?:..)或任何其他分組前綴。

有一些工具可以制作語言,例如標准提供了用於 POSIX shell 的簡化語法。

字符序列(?根據第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.

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