嗨,我想匹配字符串的第二次出现,但只是为了匹配它,而不是其他任何东西,所以在我的示例中,方括号中的 word1 意味着应该是匹配的。
word1 tex text [word1] text
word1 [word1] word1
word1 [word1]
word1 text [word1]
请你能帮助我,我正在学习正则表达式,我在互联网和书中都找不到答案。我正在使用一个接受.net regex 兼容或 perl 的记事本编辑器。
谢谢你
要仅匹配出现在其他内容后面的内容,您需要使用lookbehind。要匹配出现两次的内容,您可以使用匹配组和反向引用:
/(?<=\b\1\b.*?)\b(\w+)\b/
但是,在大多数语言中,lookbehind 的复杂性是有限的,所以我不确定这是否有效。
这取决于你想对比赛做什么。
如果你只是想得到一个关于你是否有匹配的布尔值,那么简单地看看你是否有两次这个词是很简单的:
word1.*word1
匹配任意数量的.*
任意字符,因此它只查找单词两次,介于两者之间。
如果您想更换它,请保持简单。只需替换所有内容:
word1(.*?)word1
对于替换,您需要添加?
. ?
防止了贪婪,所以当*
有三个时它不会吃掉 word1 的第二次出现。
将匹配替换为
word1\1newword
代表括号内的\1
所有内容(即,由 拾取的所有内容.*?
)。\
可能会因您使用的正则表达式引擎而异。例如,Powershell(我认为是 .NET)使用$
而不是\
.
基本上,想想你想对结果做什么。问问自己是否有更大的字符串可以匹配,而不仅仅是第二次出现。