Рассмотрим следующий текст:Почему мое регулярное выражение делает это?
foo:·····¶
·bar x··¶
·lorem ipsum····¶
dolorsitamet···¶
···¶
consectetur adipiscing elit:
Где средние точки указывают на пробелы и ¶
указывает символ новой строки.
Регулярное выражение (?:foo:\s*)(.+)(?:\n\s*)
соответствует трех пробелам на пробельной линии, но регулярное выражение (?:foo:\s*)(.+)(?:\n\s+)
соответствует и не включает в себя новую строку, следующую за dolorsitamet
. Почему символ * не ведет себя жадно? Можно было бы ожидать, что третья группа (?:\n\s*)
соответствовать
¶
···¶`
Мой режим регулярных выражений является многострочным, dotall.
Да, я использую Regex101 для изготовления регулярных выражений. То, что я на самом деле хочу, - это сопоставить все между 'foo: ···· ¶' и пробелами после' dolorsitamet ··· '(я не забочусь о завершающем пробеле, но не о новой строке), но он также должен верните то, что он сейчас делает для текста здесь https://regex101.com/r/jZ5hU0/1. Каким будет правильный способ его соответствия? –
Nevermind, я нашел решение равным '(?: Foo: \ s *) (. +?) ((?: $) | (?: \ N \ + \ n))' –
Немного упрощено: ' (?: Foo: \ S *) (\ п \ s + \ п | $) '(+.?) – anubhava