用于匹配分隔符和后缀的正则表达式,两者都是可选的

时间:2012-11-05 09:25:19

标签: php regex

我有一个可能包含分隔符的字符串。这可能意味着我有三种情况:

First and only paragraph

First and only paragraph with redundant separator
<!-- separator -->

First paragraph
<!-- separator -->
Second paragraph

我需要一个正则表达式,分别返回第一个和第二个段落(如果存在)。这是我到目前为止所尝试的:

(.*)(<!-- separator -->.*)  // fails case 1
(.*)(<!-- separator -->.*)? // fails case 2 and 3 (surprise)

我只需要这种模式。

1 个答案:

答案 0 :(得分:1)

问题可能是.默认情况下与换行符不匹配。您可以使用修饰符s来更改此项。

/(.*)(<!-- separator -->.*)?/s

s是单行修饰符,它使正则表达式将输入字符串视为“单行”,表示.也会匹配换行符。

但是你应该使量词不合理,否则第一个.*将匹配到字符串中的最后一个<!-- separator -->

/(.*?)(<!-- separator -->.*)?/s