Posix正则表达式非捕获组

时间:2016-11-26 07:25:07

标签: c regex linux posix

我在Linux下用C编写一个简单的shell。我尝试使用POSIX正则表达式解析用户输入并进行组捕获。我的问题是我不想捕获所有组,但是?符号desnt似乎对我有用。

std::thread

2 个答案:

答案 0 :(得分:6)

POSIX Regular Expressions中不允许使用(?:..)或任何其他分组前缀。

有制作语言的工具,&例如,以及POSIX shell 的简化is provided by the standard语法。

答案 1 :(得分:0)

根据9.4.3 ERE Special Characters节,字符序列(?未定义

  

*+?{

     

<asterisk><plus-sign> <question-mark> <left-brace>应该是特殊的,除非在方括号表达式中使用(请参阅RE方括号表达式) )。以下任何一种使用都会产生不确定的结果:

     
      
  • 如果这些字符首先出现在ERE中,或者紧随未转义的<vertical-line><circumflex><dollar-sign> <left-parenthesis>

  •   
  • 如果<left-brace>不是有效间隔表达式的一部分(请参阅匹配多个字符的ERE)

  •   

对于如何处理 undefined 语法,POSIX RE实现有几种选择。这些选择包括根据9.1 Regular Expression Definitions节启用扩展语法。因此,可以免费实现非捕获组语法:

  

[...]违反了RE的指定语法或语义   未定义的结果:这可能会导致错误,启用扩展   RE 的语法,或将错误的构造用作文字   要匹配的字符。

如果您希望将该功能作为将来的POSIX标准的一部分,则可以在standard's issue tracker上发布一个问题。