1

嗨,我想匹配字符串的第二次出现,但只是为了匹配它,而不是其他任何东西,所以在我的示例中,方括号中的 word1 意味着应该是匹配的。

word1 tex text [word1] text
word1 [word1] word1
word1 [word1]
word1 text [word1]

请你能帮助我,我正在学习正则表达式,我在互联网和书中都找不到答案。我正在使用一个接受.net regex 兼容或 perl 的记事本编辑器。

谢谢你

4

2 回答 2

1

要仅匹配出现在其他内容后面的内容,您需要使用lookbehind。要匹配出现两次的内容,您可以使用匹配组和反向引用

/(?<=\b\1\b.*?)\b(\w+)\b/

但是,在大多数语言中,lookbehind 的复杂性是有限的,所以我不确定这是否有效。

于 2012-12-19T00:57:33.430 回答
1

这取决于你想对比赛做什么。

如果你只是想得到一个关于你是否有匹配的布尔值,那么简单地看看你是否有两次这个词是很简单的:

word1.*word1

匹配任意数量的.*任意字符,因此它只查找单词两次,介于两者之间。

如果您想更换它,请保持简单。只需替换所有内容:

word1(.*?)word1

对于替换,您需要添加?. ?防止了贪婪,所以当*有三个时它不会吃掉 word1 的第二次出现。

将匹配替换为

word1\1newword

代表括号内的\1所有内容(即,由 拾取的所有内容.*?)。\可能会因您使用的正则表达式引擎而异。例如,Powershell(我认为是 .NET)使用$而不是\.

基本上,想想你想对结果做什么。问问自己是否有更大的字符串可以匹配,而不仅仅是第二次出现。

于 2012-12-19T01:09:37.920 回答