我读了那么多答案,总是用?操作符。我不知道我错过了什么。
给定一个示例字符串,如:
the beginning stuff:0:evnt:some random stuff:MISTER GREEN:more stuff:1:evnt:again random stuff:MISS SCARLET:the rest of the stuff
我可以使用什么模式来获得&;1&;;在"斯佳丽小姐"之前?而不需要知道随机部分的内容。我只知道它总是一个数字后面跟着&;;;;(没有引号)在我们要找的名字之前。就我而言,不用担心其他名字会妨碍我。它永远不会是这样的:3:evnt:blahblahMISTER GREEN blahblah MISS SCARLET(中间没有x:evnt)
我最初想到的是:
(d):evnt.*MISS SCARLET
给出"0"因为它匹配回mr . Green的索引,因为.*匹配所有内容。好吧,那又怎样?拯救:
(d):evnt.*?MISS SCARLET
不,相同的结果。
如何获得最接近文本的匹配?我确定我的措辞不正确,但这个例子应该表明我想要什么。我想把它分离出来思嘉小姐和"0";如果我在找格林先生
谢谢。
您可以将此正则表达式与一个否定的字符类一起使用:
(d+):evnt:[^:]*:MISS SCARLET
其中[^:]*
匹配0个或多个非:
的字符。
RegEx演示
但是,如果evnt
关键字后可能存在冒号,那么您可以使用此正则表达式并进行反向查找:
(d+):evnt:(?:(?!:evnt:).)*?:MISTER GREEN
RegEx Demo 2
这里(?:(?!:evnt:).)*?
将确保匹配0或更多的任何字符,只要:evnt:
不出现在该文本的任何地方。