Совпадение любых горизонтальных пробельных символов в начале каждой строки в многострочных строках в PHP - PullRequest
0 голосов
/ 06 мая 2019

Я хочу заменить все пустые места в начале всех новых строк. У меня есть две замены регулярных выражений:

$txt = preg_replace("/^ +/m", '', $txt);
$txt = preg_replace("/^[^\S\r\n]+/m", '', $txt);

Каждый из них соответствует разным видам пустых мест. Однако могут быть вероятности того, что оба пустых пространства существуют и находятся в разных порядках, поэтому я хочу сопоставить вхождения всех из них в начале новых строк. Как я могу это сделать?

ПРИМЕЧАНИЕ : первое регулярное выражение соответствует идеографическому пространству , \u3000 char, которое можно проверить только в необработанном теле question (SO рендеринг не делает правильную работу здесь). Второе регулярное выражение соответствует только символам ASCII, отличным от LF и CR. Вот демонстрационная версия , доказывающая, что второе регулярное выражение не соответствует тому, что соответствует первому регулярному выражению.

1 Ответ

1 голос
/ 06 мая 2019

Поскольку вы хотите удалить любой горизонтальный пробел из строки Unicode, вам необходимо использовать

Использование

$txt = preg_replace("/^\h+/mu", '', $txt);

Подробности

  • ^ - начало строки (m модификатор заставляет ^ соответствовать всем начальным позициям строки, а не только начальной позиции строки)
  • \h+ - один или несколько горизонтальных пробелов
  • u Модификатор будет гарантировать, что текст Unicode будет обрабатываться как последовательность кодовых точек Unicode, а не только кодовые единицы, и сделает все экранированные регулярные выражения в шаблонеUnicode знает.
...