我想匹配一个文本(数字,字符串,特殊字符,空格,一个换行符......),然后至少有两个换行符(每行以空格开头,然后是换行符)。目前我只能匹配多个换行符,但我想匹配之前的文本..我正在使用这个正则表达式:\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
将使量词不合适(懒惰)。
这是一个有效的例子:https://regex101.com/r/G0KS3g/1
UPD:如果你不能使用标志,试试这个:
([\S\s]*?)\n\s*\n
这里我们有一个懒惰的量词*?
,[\S\s]
匹配任何字符,除了换行符.
或换行\n
。
但是,软件的正则表达式可能会带来更多限制。