如何捕获由未知字符串包围的可选组?



我想完全匹配两个字符串,并使用正则表达式捕获子字符串bbbxxx作为一个组。xxx是未知的和可变的。

aaaxxxbbbxxxddd
aaaxxxddd

我最接近的是像这样的(aaa).*?(bbb.*?)?.*,但一旦我把?放在组后面,它就不再被捕获了。

下面是真实世界的例子:https://regex101.com/r/MAxJix/1我想保持组从第一个字符串,但正则表达式应该匹配@id="myLabel"在第二个字符串,太(但不捕获到组)。

谢谢!

您可以将此正则表达式用于可选的捕获组:

^@(?:id|class)="[^"]*?( on[a-z]*=[^"]*)?"

RegEx演示

正则表达式解释:

  • ^: Start
  • @: Match a@
  • (?:id|class):匹配idclass
  • =":匹配="
  • [^"]*?:匹配0或非"字符(惰性)
  • ( on[a-z]*=[^"]*)?:可选捕获组,匹配空格+on<lowercase letters>=+ 0或任何非"字符
  • ":匹配关闭"

这对您的用例有效吗?

(@id=|@class=).*?( on[a-z]*?=.*)[",',`]|@id=Ww+W

最新更新