我在Linux下用C编写一个简单的shell。我尝试使用POSIX正则表达式解析用户输入并进行组捕获。我的问题是我不想捕获所有组,但是?符号desnt似乎对我有用。
std::thread
答案 0 :(得分:6)
POSIX Regular Expressions中不允许使用(?:..)
或任何其他分组前缀。
有制作语言的工具,lex&例如yacc,以及POSIX shell yacc的简化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上发布一个问题。