正则表达集团对两场比赛的调查结果

时间:2015-11-09 22:06:55

标签: regex regex-negation

我不是正则表达的忠实粉丝,但这次我认为没有办法做我想要的。请通过真实的实时测试查看我的示例:(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 @(仅限数字)”和“ACTION_READLN〜*〜”

BEGIN @\d+|(ACTION_READLN.~.+~)

现在,我希望在第一次出现ACTION_READLN时将第一次出现的BEGIN分组。我怎么能这样做?

编辑:预期结果:

Group1:
BEGIN @1011
ACTION_READLN ~variableName~

Group2:
BEGIN @1012
ACTION_READLN ~someothervariable~

1 个答案:

答案 0 :(得分:1)

仅在点之间使用s标记来消耗换行符。 Groups将捕获所需的内容。

$re = '/(BEGIN @\d+)\b(?s:.*?)(ACTION_READLN.*)/';

See demo at regex101。如果需要,preg_match_all使用PREG_SET_ORDER设置输出模式。

preg_match_all($re, $str, $out, PREG_SET_ORDER);

每个$out中的捕获匹配将是元素[1][2][0]完全匹配。 Try at eval.in