正则表达式如何和 ?使用多个字符?
how does regex | and ? work with multiple characters?
编辑:我正在使用 C++11 std::regex。
我如何知道正则表达式 "operator" 适用于单个字符还是一堆字符?
示例 1:如果我有一个 apple|orange
的正则表达式,为什么它不匹配:
applerange
applorange
示例 2:如果我有一个正则表达式 loo?se
,这是否意味着前面的字符是可选的?为什么不匹配:
se
鉴于这 2 个示例和我有限的正则表达式技能,我解决了这 2 个问题,如下所示:
- 在示例 1 中,要有一个字符 "or" 我会写:
appl[eo]range
- 在示例 2 中,要使前 3 个字符可选,我会这样写:
(?:loo)?se
这些是正确的解决方案,还是有更明显的解决方案?
交替运算符 |
交替到下一个边界,它是模式的 start/end、封闭括号或另一个交替。即
apple|orange
(apple)|(orange)
含义相同,匹配 "apple"
或 "orange"
。
以管道为边界进行说明:
apple|orange|pear
(apple)|(orange)|(pear)
意思相同
可选运算符 ?
适用于前面的术语。没有括号,它是前一个单个字符。即
loo?se
lo(o)?se
含义相同,匹配"lose"
或"loose"
。前面的术语也可以是字符 class 或括号(分组)术语。
编辑:我正在使用 C++11 std::regex。
我如何知道正则表达式 "operator" 适用于单个字符还是一堆字符?
示例 1:如果我有一个 apple|orange
的正则表达式,为什么它不匹配:
applerange
applorange
示例 2:如果我有一个正则表达式 loo?se
,这是否意味着前面的字符是可选的?为什么不匹配:
se
鉴于这 2 个示例和我有限的正则表达式技能,我解决了这 2 个问题,如下所示:
- 在示例 1 中,要有一个字符 "or" 我会写:
appl[eo]range
- 在示例 2 中,要使前 3 个字符可选,我会这样写:
(?:loo)?se
这些是正确的解决方案,还是有更明显的解决方案?
交替运算符 |
交替到下一个边界,它是模式的 start/end、封闭括号或另一个交替。即
apple|orange
(apple)|(orange)
含义相同,匹配 "apple"
或 "orange"
。
以管道为边界进行说明:
apple|orange|pear
(apple)|(orange)|(pear)
意思相同
可选运算符 ?
适用于前面的术语。没有括号,它是前一个单个字符。即
loo?se
lo(o)?se
含义相同,匹配"lose"
或"loose"
。前面的术语也可以是字符 class 或括号(分组)术语。