正则表达式可选前瞻

Pau*_*les 13 regex

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

  1. startabcend
  2. startdef
  3. blahstartghiend
  4. blahstartjklendsomething

并返回abc,def,ghijkl分别.

我有以下这个适用于案例1和3,但我很难使前瞻可选.

(?<=start).*(?=end.*)
Run Code Online (Sandbox Code Playgroud)

编辑:

嗯.不好的例子.实际上,中间的位不是数字,而是先于一组特定的字符,并且可选地由它继续.我已根据要求更新了输入和输出,并添加了第4个示例以回应某些问题.

Amb*_*ber 13

试着在各行之间阅读,看起来好像你不想在这里期待,你实际上想要非贪婪.*?.

(?<=start).*?(?:end)?$
Run Code Online (Sandbox Code Playgroud)

我的猜测是你试图匹配类似的东西"start123end",但不希望它end或者start出现在匹配的文本中,因此你在那里有一个看起来断言来约束.*通常贪婪的东西.

相反,您可以使用非贪婪变体并使用a锚定模式的右端$.

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

start(.*?)(end)?$
Run Code Online (Sandbox Code Playgroud)

然后从第一个捕获组中获取值.)


ste*_*ema 12

也许是这样的:

(?<=start).*?(?=(?:end|$))
Run Code Online (Sandbox Code Playgroud)

这将匹配到"开始"和"结束"或直到行尾,此外量词必须是非贪婪的(.*?)

在Regexr上看到它

将Regexr上的示例扩展为不仅可以使用数字.