我有一个这样的多行字符串:
"...Togo...Togo...Togo...ACTIVE..."
我希望得到第三个'Togo'和'ACTIVE'之间的所有内容以及字符串的其余部分。我无法创建可以执行此操作的正则表达式。如果我尝试像
那样的话reg = "(Togo^[Togo]*?)(ACTIVE.*)"
没有捕获任何内容(捕获组需要第一个和最后一个括号)。
答案 0 :(得分:1)
reg = "Togo.*Togo.*Togo(.*)ACTIVE"
或者,如果你想匹配最后一次出现的多哥和以下出现的ACTIVE之间的字符串,并且多哥出现的次数不一定是三次,试试这个:
reg = "Togo(([^T]|T[^o]|To[^g]|Tog[^o])*T?.?.?)ACTIVE"
答案 1 :(得分:1)
这只匹配所需的部分:
.*(Togo.*?)(ACTIVE.*)
前导.*
贪婪,因此以下Togo
会在最后一个位置匹配。捕获的部分从最后Togo
开始。
在你的表达中,^[Togo]*?
没有做正确的事。 ^
尝试匹配行的开头,[Togo]
匹配任何字符T
,o
或g
。即使[^Togo]
也不起作用,因为这只匹配任何非T
,o
或g
的字符。
答案 2 :(得分:1)
"(Togo(?:(?!Togo).)*)(ACTIVE.*)"
正则表达式中的方括号形成一个与“T”,“o”或“g”字符之一匹配的字符类。插入符号('^')匹配输入的开头(如果它不在字符类中),并且可以在方括号内使用它来反转字符类。
在我的正则表达式中,在匹配单词“Togo”后,我一次匹配一个字符,但只有在我检查它不是“Togo”的另一个实例的开头之后。 (?!Togo)
被称为negative lookahead。