正则表达式风格:wxRegEx。
我正在尝试创建一个“分组”正则表达式,它匹配有时以空格开头的字符串。当它不以空格开头时,它以目标组开头(以下示例中的第二个带括号的表达式)。这是一条相对简单的线,由一些可预测的标记和任意文本的一部分组成,例如
"good: Sed ut perspiciatis unde omnis iste natus error "
"better: Sit voluptatem accusantium doloremque laudantium "
"best: Nemo enim ipsam voluptatem quia voluptas "
" ok: Sit voluptatem accusantium doloremque laudantium "
注意:引用的字符不是我输入的一部分。通过在我的帖子中引入引号,我试图使每行/字符串的边界更加清晰。
我想出的以“分组”方式匹配上述内容的正则表达式(即我可以单独处理每个组以进行进一步处理)是:
(^\s*)(good|better|best|ok)(: )(.*)( $)
注意:\s 是 wxRegEx 的 [[:space:]] 的类简写转义。
问题是这个正则表达式仅在该行实际上以空格开头时才有效。为什么? '\s' 后面的 '*' 不是表示“0 次或多次出现 \s”吗?
我知道我在这里遗漏了一些基本的东西,但它是什么?
您是否尝试过使用
(^ *)
而不是 (^\s*)
?您是否可能对 \s
语法有误?我自己也不知道wxRegEx。
我对wxRegEx不太熟悉,但如果是PCRE,我想你可能会想要(^\s*)?(好|...
“?”修改整个零或多个捕获以使其成为零或一。
这很奇怪.. 你是对的,* 应该匹配 0 次或多次出现...将插入符号 (^) 移到组外有什么区别吗?
我在你的正则表达式中没有看到明显的错误。当然,您对
*
的解释也是正确的。你的表达中可能有一些实际的空格吗?空间(比如 ->
<- ) has no special meaning in regex and the engine will try to match it. If your first capturing group looked like (^ \s*)
这会产生你描述的效果。