正则表达式:匹配所有直到某个单词(PHP)

时间:2012-03-21 09:58:09

标签: php regex

我正在使用PHP处理文件。

此文件包含几个块,始终以“步骤”(步骤1,步骤2等)开头,并始终以“结束步骤”结束。 Withing,它可以有换行符,但从来没有2。

我正在尝试构建一个将其转换为数组的正则表达式。

到目前为止我所拥有的是

preg_match_all("/Step([^\"end step\"]*)/s", $content, $matches);

patnern末尾的/ s也允许包含新闻热线。 但是,当然,这不起作用,因为“结束步骤”中的所有字母都被排除在外,不仅仅是它们形成一个单词。我怎样才能写出正确的正则表达式?

1 个答案:

答案 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"是否可以在那里匹配,如果是真的则结束匹配。