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