Regex在两个随机字符串之间匹配可选的贪婪字符串



我正在寻找一种方法来匹配以下字符串中的可选ABC。无论是否存在ABC,两个字符串都应该匹配:

具有未定义长度的前一个字符串ABC具有未定义宽度的后一个字符串具有未定义长度的前一字符串

我试过

.*(ABC).*

这对可选的ABC不起作用,但使ABC不贪婪也不起作用——因为.*将占据所有的优势:

.*(ABC)?.*

这不是重复的,例如Regex匹配两个字符串之间的所有字符,因为我在两个随机字符串之间寻找某个字符串,有点相反。

您可以使用

.*(ABC).*|.*

这是这样工作的:

  • .*(ABC).*模式首先被搜索,因为它是替换的最左边部分(请参阅"记住Regex Engine is Eager"(,它会尽可能多地查找除换行符之外的任何零个或多个字符,然后将ABC捕获到组1中,然后将行的其余部分与右边的.*匹配
  • |-或
  • 如果第一替换部分不匹配,则搜索.*-

另一种无需使用交替的解决方案

^(?:.*(ABC))?.*

请参阅此regex演示详细信息

  • ^-字符串的开头
  • (?:.*(ABC))?-一个可选的非捕获组,它尽可能多地匹配零个或多个字符(换行字符除外(,然后将ABC字符序列捕获到组1中
  • .*-零个或多个字符(换行字符除外(,尽可能多

我自己想出了一个答案:使用OR运算符似乎有效:

(?:(?:.*(ABC))|.*).*

如果有更好的方法,请随时回答,我会接受的。

您可以使用以下正则表达式:.*(ABC){0,1}.*。它的意思是任意,可选的{min,max},任意。它更容易阅读。由于处理速度的原因,我不能说你的解决方案还是我的解决方案更快。选项:{value}=n次{min,}=最小到无穷大{min,max}=最小至最大

.+([ABC])?.+应该完成的工作

最新更新