Php 将后跟多个换行符的文本与空格匹配

Php 将后跟多个换行符的文本与空格匹配,php,regex,pcre,Php,Regex,Pcre,我想匹配一个文本(数字、字符串、特殊字符、空格、一个换行符…),后跟至少两个换行符(每行以空格开头,然后换行符)。目前我只能匹配多个换行符,但我想在之前匹配文本。。 我正在使用此正则表达式:\n+\s*\n+这是我的输入: Test Test TestTester TestTestt Test Test TestTestTestTest: 29724 @erq Test Test we

我想匹配一个文本(数字、字符串、特殊字符、空格、一个换行符…),后跟至少两个换行符(每行以空格开头,然后换行符)。目前我只能匹配多个换行符,但我想在之前匹配文本。。 我正在使用此正则表达式:
\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
这应该有助于:

$re = '/(.+\n)\n\s*\n/sU';
preg_match($re, $str, $matches, PREG_OFFSET_CAPTURE, 0);
标志
s
U
在这里非常重要

s
意味着
将匹配换行符,
U
将使量词不灵活(懒惰)

下面是一个工作示例:

UPD:如果无法使用标志,请尝试以下方法:

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

这里有一个惰性量词
*?
[\S\S]
匹配除换行符
或换行符
\n
之外的任何字符


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

类似于
if(preg_match('~^(.*?)\R{3,}~s',$s,$match)){echo trim($match[1]);}
,请参见。谢谢@WiktorStribiżew但这对我不起作用,因为文本后的换行总是以空格开头(请参见文章,我刚刚更新了它),我只能使用全局标志。我可以只使用一个没有标志的正则表达式吗?或者只是“全局标志”?我不是在代码中注入这个正则表达式,我使用的是拖放软件,它只接受没有标志的正则表达式。更新了答案,添加了一个不使用任何标志的选项。永远不要使用
(.|\n)*?
,请用
*?
替换并添加
/s
修饰符。我是认真的,永远不要使用
(.\n)
,永远不要。