Regex 捕获可选组

Regex 捕获可选组,regex,regex-group,Regex,Regex Group,我想捕获一些可能是可选的键的值,特别是考虑下面的字符串。 @Foo1:dog|a=5|b=6|c=10|d=12|e=2 @Foo2:cat|a=12|c=10|d=11|e=123 @Foo1:bat|a=213123|b=10 @Foo3:pet|c=346 现在我想捕获@和:,:和|之间的字符串,以及键b,d的值,这可能是可选的。 我应该做以下几件事 Foo1, dog, 6, 12 Foo2, cat, 11 Foo1, bat, 10 Foo3, pet 我正在使用这个正则表达式

我想捕获一些可能是可选的键的值,特别是考虑

下面的字符串。
@Foo1:dog|a=5|b=6|c=10|d=12|e=2
@Foo2:cat|a=12|c=10|d=11|e=123
@Foo1:bat|a=213123|b=10
@Foo3:pet|c=346
现在我想捕获@和:,:和|之间的字符串,以及键b,d的值,这可能是可选的。 我应该做以下几件事

Foo1, dog, 6, 12
Foo2, cat, 11
Foo1, bat, 10
Foo3, pet
我正在使用这个正则表达式
^@(\w+):(\w+).*(:b=(\d+))。*(?:d=(\d+)
但它仅在b和d都存在时才起作用。

您可以使用

^@(\w+):(\w+)(?:.*?\|b=(\d+))?(?:.*?\|d=(\d+))?

详细信息

  • ^
    -字符串的开头
  • @
    -一个
    @
    字符
  • (\w+)
    -第1组:一个或多个单词字符
  • -冒号
  • (\w+)
    -第2组:一个或多个单词字符
  • (?:.*\\\\\\\\\(\d+))
    -一个可选的非捕获组,匹配除换行符以外的任何0+字符,尽可能少,然后
    ;b=
    ,然后将1+个数字捕获到组3中
  • (?:.\\124; d=(\d+)
    -一个可选的非捕获组,匹配除换行符以外的任何0+字符,尽可能少,然后
    |d=
    ,然后将1+个数字捕获到组4中