编辑:我正在使用C ++ 11 std :: regex。
我如何知道正则表达式"运算符"适用于单个字符或一堆字符?
示例1:如果我有apple|orange
的正则表达式,为什么它不匹配:
applerange
applorange
示例2:如果我有loo?se
的正则表达式,那么这意味着之前的字符是可选的吗?为什么不匹配:
se
鉴于这两个例子和我有限的正则表达式技巧,我解决了这两个问题:
appl[eo]range
(?:loo)?se
这些是正确的解决方案,还是有更明显的解决方案?
答案 0 :(得分:2)
交替运算符|
交替进入下一个边界,即模式的开始/结束,括号或其他交替。即。
apple|orange
(apple)|(orange)
的含义相同且匹配"apple"
或"orange"
。
将管道说明为边界:
apple|orange|pear
(apple)|(orange)|(pear)
含义相同。
可选运算符?
适用于前一个术语。没有括号,它是前一个单个字符。即。
loo?se
lo(o)?se
的含义相同,并且匹配"lose"
或"loose"
。前面的术语也可以是字符类或括号(分组)术语。