两个匹配项的正则表达式组结果
Regex group findings of two matches
我不太喜欢正则表达式,但这次我认为没有办法做我想做的事。请查看我的真实实时测试示例:(BEGIN @\d+\b.*?ACTION_READLN ~.+?~) 考虑这样的原始文本数据:
BEGIN @1011 Text
Text
ACTION_READLN ~variableName~
Text
END
BEGIN @1012
asdasd
ACTION_READLN ~someothervariable~
END
BEGIN @1013
asd
END
我能够创建找到 "BEGIN @(only numbers)" 和 "ACTION_READLN ~*~"
的正则表达式
BEGIN @\d+|(ACTION_READLN.~.+~)
现在,我想将首次出现的 BEGIN 与首次出现的 ACTION_READLN 组合在一起。我该怎么做?
编辑:预期结果:
Group1:
BEGIN @1011
ACTION_READLN ~variableName~
Group2:
BEGIN @1012
ACTION_READLN ~someothervariable~
仅在点之间使用 s
标志来消耗换行符。 Groups 将捕获需要的东西。
$re = '/(BEGIN @\d+)\b(?s:.*?)(ACTION_READLN.*)/';
See demo at regex101. With preg_match_all 如果需要,使用 PREG_SET_ORDER
设置输出模式。
preg_match_all($re, $str, $out, PREG_SET_ORDER);
每个 $out
中捕获的匹配项将是元素 [1]
和 [2]
。 [0]
完全匹配。 Try at eval.in
我不太喜欢正则表达式,但这次我认为没有办法做我想做的事。请查看我的真实实时测试示例:(BEGIN @\d+\b.*?ACTION_READLN ~.+?~) 考虑这样的原始文本数据:
BEGIN @1011 Text
Text
ACTION_READLN ~variableName~
Text
END
BEGIN @1012
asdasd
ACTION_READLN ~someothervariable~
END
BEGIN @1013
asd
END
我能够创建找到 "BEGIN @(only numbers)" 和 "ACTION_READLN ~*~"
的正则表达式BEGIN @\d+|(ACTION_READLN.~.+~)
现在,我想将首次出现的 BEGIN 与首次出现的 ACTION_READLN 组合在一起。我该怎么做?
编辑:预期结果:
Group1:
BEGIN @1011
ACTION_READLN ~variableName~
Group2:
BEGIN @1012
ACTION_READLN ~someothervariable~
仅在点之间使用 s
标志来消耗换行符。 Groups 将捕获需要的东西。
$re = '/(BEGIN @\d+)\b(?s:.*?)(ACTION_READLN.*)/';
See demo at regex101. With preg_match_all 如果需要,使用 PREG_SET_ORDER
设置输出模式。
preg_match_all($re, $str, $out, PREG_SET_ORDER);
每个 $out
中捕获的匹配项将是元素 [1]
和 [2]
。 [0]
完全匹配。 Try at eval.in