RegEx (php) - объединяет строки в многострочную замену - PullRequest
0 голосов
/ 11 апреля 2010

Мне нужно изменить фон для всего текста, который имеет два пробела от начала строки.

  text

должно быть преобразовано в "<div class='special'>text</div>"

Это просто:

$text = preg_replace("|^  (.+)|um", "<div class='special'>$1</div>", $text);

Но

  line1
  line2

Преобразуется в

<div class='special'>line1</div>
<div class='special'>line2</div>

Хотя

<div class='special'>line1
line2</div>

необходимо.

Какчего можно достичь?

Ответы [ 2 ]

1 голос
/ 11 апреля 2010

Вы захотите использовать модификатор образца "S" (DOTALL), чтобы вы могли захватывать несколько строк. Затем остановите жадность, сопоставив «новую строку, за которой следует что-то, кроме двух пробелов»

<?PHP
$text = "
  Line One
  Line Two
  Line Three
something";

$text = preg_replace("|^  (.+)^[^(  )]|ums", "<div class='special'>$1</div>\n", $text);


echo $text;

Выходы:

<div class='special'>Line One
  Line Two
  Line Three
</div>
0 голосов
/ 12 апреля 2010

Заменить

((?:^  [^\r\n]*(?:\R(?=  ))?)+)

с <div class='special'>$1</div>.

Но это преобразует

  line1
  line2

к этому:

<div class='special'>  line1
  line2</div>

Если вы хотите удалить пробелы, вы должны сопоставить текст, удалить пробелы и затем заменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...