Regex 正则表达式多次捕获组和其他组
我正在尝试创建一个正则表达式,它捕获多组数据 以下是一些数据示例:Regex 正则表达式多次捕获组和其他组,regex,pcre,Regex,Pcre,我正在尝试创建一个正则表达式,它捕获多组数据 以下是一些数据示例: sampledata=X B : xyz=1 FAB1_1=03 FAB2_1=01 A : xyz=1 FAB1_1=03 FAB2_1=01 我需要捕获应该出现一次的X,以及FAB1_1=03,FAB2_1=01。。。以FAB开头的所有字符串 所以,我可以像这样捕捉所有的“晶圆厂”: /(FAB[0-9]_[0-9]=[0-9]*)/sg 但我无法使用以下表达式包含对X的捕获: /sampledata=(?<sam
sampledata=X
B : xyz=1 FAB1_1=03 FAB2_1=01
A : xyz=1 FAB1_1=03 FAB2_1=01
我需要捕获应该出现一次的X
,以及FAB1_1=03
,FAB2_1=01
。。。以FAB
开头的所有字符串
所以,我可以像这样捕捉所有的“晶圆厂”:
/(FAB[0-9]_[0-9]=[0-9]*)/sg
但我无法使用以下表达式包含对X
的捕获:
/sampledata=(?<samplegroup>[0-9A-Z]).*(FAB[0-9]_[0-9]=[0-9]*)/sg
/sampledata=(?[0-9A-Z]).*(FAB[0-9].[0-9]=[0-9]*)/sg
此正则表达式只返回一个带有X
的组和最后一个匹配的“FAB”组。您可以使用
(?:sampledata=(\S+)|(?!^)\G)(?:(?!FAB[0-9]_[0-9]=).)*(FAB[0-9]_[0-9])=([0-9]*)
见
正则表达式基于\G
运算符,该运算符匹配字符串的开头或上一次成功匹配的结尾。我们将其限制为仅在后一种情况下与负前瞻(?!^)
匹配
因此:
-匹配一个文本(?:sampledata=(\S+)|(?!^)\G)
,然后匹配一个或多个非空白符号并将其捕获到组1中-或-匹配上一次成功匹配的结尾sampledata=
-匹配任何不是(?:(?!FAB[0-9].[0-9]=)*
的文本(这是一个)FABn\u n=
-捕获组2,匹配并捕获(FAB[0-9]\uU[0-9])
,后跟一个数字,然后是一个FAB
,还有一个数字\uU
-文字=
=
([0-9]*)代码>-捕获组3,匹配并捕获零或多个数字
sampledata=
block,您可以安全地展开令牌(),如下所示:
这样,表达式将更加有效
如果您有多个sampledata
块,请增强令牌:
(?:sampledata=(\S+)|(?!^)\G)(?:(?!sampledata=|FAB[0-9]_[0-9]=).)*(FAB[0-9]_[0-9])=([0-9]*)
看到了吗?@Stribizev是的,没错!谢谢,我不太理解你的表达式,但它正在工作。请注意:展开的正则表达式模式不需要
/s
修饰符,但它需要修饰符。
(?:sampledata=(\S+)|(?!^)\G)(?:(?!sampledata=|FAB[0-9]_[0-9]=).)*(FAB[0-9]_[0-9])=([0-9]*)