我想要一个正则表达式来匹配所有这些:startabcend
startdef
blahstartghiend
blahstartjklendsomething
并分别返回abc
,def
,ghi
和jkl
。
我有以下适用于情况1和3的内容,但无法使前瞻性成为可选内容。
(?<=start).*(?=end.*)
编辑:
嗯不好的例子。实际上,中间的位不是数字,而是以一组特定字符开头,并且可以选择由其后继。我已根据要求更新了输入和输出,并添加了第四个示例来回答某人的问题。
最佳答案
尝试在两行之间阅读时,似乎您不想在这里先行,实际上您想要的是非贪婪的.*?
。
(?<=start).*?(?:end)?$
我的猜测是您要尝试与
"start123end"
之类的东西进行匹配,但不希望end
或start
出现在匹配的文本中,因此,您具有环视断言来约束.*
通常是贪婪的。相反,您可以只使用非贪婪的变体,并使用
$
锚定图案的右端。(或者,如果您能够使用捕获组,则应该这样做:
start(.*?)(end)?$
然后只需从第一个捕获组中获取值即可。)
关于regex - 正则表达式可选的前瞻,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7361001/