我正在使用PHP处理文件。
此文件包含几个块,始终以“步骤”(步骤1,步骤2等)开头,并始终以“结束步骤”结束。 Withing,它可以有换行符,但从来没有2。
我正在尝试构建一个将其转换为数组的正则表达式。
到目前为止我所拥有的是
preg_match_all("/Step([^\"end step\"]*)/s", $content, $matches);
patnern末尾的/ s也允许包含新闻热线。 但是,当然,这不起作用,因为“结束步骤”中的所有字母都被排除在外,不仅仅是它们形成一个单词。我怎样才能写出正确的正则表达式?
答案 0 :(得分:2)
一个简单的方法:
preg_match_all('/Step(.*?)"end step"/s', $content, $matches);
这匹配Step
到最近的"end step"
的任何文字。但它需要在每一个可能很慢的角色后回溯。
稍微更明确,可能更有效::
preg_match_all('/Step((?:(?!"end step").)*)/s', $content, $matches);
这与Step
的所有文字相匹配,但不包括最近的"end step"
。如果永远不会出现"end step"
,它将匹配到字符串的结尾。这个正则表达式向前看每一步,检查字符串"end step"
是否可以在那里匹配,如果是真的则结束匹配。