我想要一个正则表达式来匹配所有这些:


startabcend
startdef
blahstartghiend
blahstartjklendsomething


并分别返回abcdefghijkl

我有以下适用于情况1和3的内容,但无法使前瞻性成为可选内容。

(?<=start).*(?=end.*)


编辑:

嗯不好的例子。实际上,中间的位不是数字,而是以一组特定字符开头,并且可以选择由其后继。我已根据要求更新了输入和输出,并添加了第四个示例来回答某人的问题。

最佳答案

尝试在两行之间阅读时,似乎您不想在这里先行,实际上您想要的是非贪婪的.*?

(?<=start).*?(?:end)?$


我的猜测是您要尝试与"start123end"之类的东西进行匹配,但不希望endstart出现在匹配的文本中,因此,您具有环视断言来约束.*通常是贪婪的。

相反,您可以只使用非贪婪的变体,并使用$锚定图案的右端。

(或者,如果您能够使用捕获组,则应该这样做:

start(.*?)(end)?$


然后只需从第一个捕获组中获取值即可。)

关于regex - 正则表达式可选的前瞻,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7361001/

10-11 12:40