匹配文本,后跟多个带有空格的换行符

时间:2019-04-11 14:02:46

标签: php regex pcre

我想匹配一个文本(数字,字符串,特殊字符,空格,一个换行符...),然后至少匹配两个换行符(每行以空格开头,然后换行)。目前,我只能匹配多个换行符,但是我想匹配之前的文本。 我正在使用以下正则表达式:\n+\s*\n+这是我的输入:

        Test Test TestTester TestTestt                              Test Test TestTestTestTest: 29724 @erq
        Test Test we                                Test Test, iuow, 0202220
        Test Test  962ert64






                             Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest 
                                      Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest 
                                      Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest 
Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest Test Test TestTestTestTest 

输出应为:

Test Test TestTester TestTestt                              Test Test TestTestTestTest: 29724 @erq
        Test Test we                                Test Test, iuow, 0202220
        Test Test  962ert64

1 个答案:

答案 0 :(得分:2)

这应该有所帮助:

$re = '/(.+\n)\n\s*\n/sU';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);

标志sU在这里非常重要!

s表示.将与换行符匹配,而U将使量词变得不贪婪(惰性)。

这是一个可行的示例:https://regex101.com/r/G0KS3g/1

UPD::如果您不能使用标志,请尝试以下操作:

([\S\s]*?)\n\s*\n

这里我们有一个懒惰的量词*?[\S\s]匹配除换行符.或换行符\n以外的任何字符。

但是,您软件的regex方言可能会带来更多限制。