分组正则表达式来匹配*有时*以空格开头的行?

问题描述 投票:0回答:4

正则表达式风格: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”吗?

我知道我在这里遗漏了一些基本的东西,但它是什么?

regex wxwidgets
4个回答
2
投票

您是否尝试过使用

(^ *)
而不是
(^\s*)
?您是否可能对
\s
语法有误?我自己也不知道wxRegEx。


0
投票

我对wxRegEx不太熟悉,但如果是PCRE,我想你可能会想要(^\s*)?(好|...

“?”修改整个零或多个捕获以使其成为零或一。


0
投票

这很奇怪.. 你是对的,* 应该匹配 0 次或多次出现...将插入符号 (^) 移到组外有什么区别吗?


0
投票

我在你的正则表达式中没有看到明显的错误。当然,您对

*
的解释也是正确的。你的表达中可能有一些实际的空格吗?空间(比如 ->
<- ) has no special meaning in regex and the engine will try to match it. If your first capturing group looked like
(^ \s*)
这会产生你描述的效果。

© www.soinside.com 2019 - 2024. All rights reserved.