сопоставить текст с несколькими разрывами строк с пробелами - PullRequest
1 голос
/ 11 апреля 2019

Я бы хотел сопоставить текст (числа, строки, специальные символы, пробелы, один разрыв строки ...), за которым следовало бы как минимум два переноса строк (каждая строка начинается с пробела, а затем разрыв строки).На данный момент я могу сопоставить только несколько разрывов строк, но я хочу сопоставить текст раньше ... Я использую это регулярное выражение: \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 Ответ

2 голосов
/ 11 апреля 2019

Это должно помочь:

$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.

Однако диалект регулярных выражений вашего программного обеспечения может принести больше ограничений.

...