gpt4 book ai didi

regex - 匹配第 n 次出现(排除最后一次出现)

转载 作者:行者123 更新时间:2023-12-05 06:29:54 24 4
gpt4 key购买 nike

我有一个关于正则表达式的问题。我不知道为什么我不能执行以下操作。

例句:

"This is a test string with five t's"

我使用的正则表达式:

^(.*?(?=t)){3}

我希望正则表达式匹配以下内容。

"This is a test s"

但是它不起作用,有人知道为什么吗?

最佳答案

这里的重点是整个.*?(?=t)组模式可以匹配一个空字符串。它在第一个 t 之前停止并且不能“跳转”,因为它保持在前瞻模式(非消耗模式)匹配时的位置。

你不能这样做,你必须消耗(并移动正则表达式索引)至少一个字符。

这个具体案例的替代解决方案是

^(?:[^t]*t){2}[^t]*

参见 regex demo^(?:[^t]*t){2}[^t]* 匹配字符串的开头 (^),然后消耗两次 ({2}) t 以外的任何字符 ([^t]*) 后跟 t,然后再次消耗 t 以外的任何字符的两次出现 ({2})。

或者,一般情况下的解决方案(如果 t 是一个多字符字符串):

^(?:.*?t){2}(?:(?!t).)*

参见 another regex demo . (?:.*?t){2} 模式匹配两次出现的任何 0+ 字符,尽可能少,直到第一个 t,然后 (?:(?!t).)* 匹配任何字符,出现次数超过 0 次,但不会启动 t 字符序列。

关于regex - 匹配第 n 次出现(排除最后一次出现),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52985944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com