我想找到两个特定单词之间的字符串。在图片中看到我制作的图案。问题是“ INICIO”出现了两次,我只希望它与最后一次出现匹配,直到单词“ FIM”为止。在这种情况下,我希望第一个模式是INICIOBBBBBBBBBBBFBFIM。我需要匹配字符串中的所有匹配项。
答案 0 :(得分:4)
您正在寻找的声音听起来像Rexegg所说的tempered greedy token。
INICIO(?:(?!INICIO).)*?FIM
See your updated demo at regex101
否定的超前将使点“回火”,以使其不跳过另一个起点。这种做法的成本很高,因为如果在继续前进之前没有INICIO
,则在每个位置之前,先行向前看。
如果有兴趣,there is a nice answer on SO对其进行详细说明。
答案 1 :(得分:0)
也许
.*(INICIO.*?FIM)
或
INICIO(?!.*\BINICIO\B)\B.*?\BFIM
可能没问题。
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。
答案 2 :(得分:0)
反转字符串,然后搜索
MIF.*?OICINI
然后撤消比赛
"JJJJJJJJJJJJJJJINICIOAAAAAAAAAAAAINICIOBBBBBBBBBBBBFIMJJJJJJJJJJJJJJINICIOJJJJJJJJJJJJJJFIM"
.split("")
.reverse()
.join("")
.match(/MIF.*?OICINI/g)[1]
.split("")
.reverse()
.join("");
(注意,我实际上是在这里抢第二场比赛。这是因为比赛的顺序也相反)
答案 3 :(得分:0)
有些人为设计,但这可能有效:
(?<=INICIO).*?(INICIO.*?FIM)|(?<=FIM).*?(INICIO.*?FIM)
您的结果将在$2