为什么我获得成功但空的正则表达式匹配?

时间:2009-03-08 16:24:42

标签: regex

我正在使用(.*)\\1搜索文本blabl上的模式regexec()。我在regmatch_t结构中获得了成功但空的匹配。究竟有什么匹配?

3 个答案:

答案 0 :(得分:5)

正则表达式。*可以成功匹配一串零字符,或相邻字符之间没有任何内容。

所以你的模式匹配了parens中的零个字符,然后紧接着匹配零个字符。

因此,如果你的正则表达式是/f(.*)\1/,它将匹配'f'和第一个'o'之间的字符串“foo”。

您可以尝试使用.+代替.*,因为它匹配一个或多个而不是零或更多。 (使用。+你应该匹配'foo'中的'oo')

答案 1 :(得分:0)

\ 1是后来通常用于替换的反向引用,或者当尝试通过在匹配中获得匹配来进一步优化正则表达式时。你应该只使用(。*),这会给你你想要的结果,并会自动给出反向引用数字1.我不是正则表达式专家,但这些是基于我有限知识的想法。

顺便说一句,在尝试查看真正发生的事情时,我总是回到RegexBuddy。

答案 2 :(得分:0)

\ 1是“重新匹配”指令。问题是,你想立即重新匹配(例如, BLABLA

/(.+)\1/

或更晚(例如 BLA ahem BLA

/(.+).*\1/