RegEx (php) - satırlı replasmanı satırları birleştirmek

2 Cevap php

Ben satırın başından itibaren iki boşluk var tüm metnin arka planını değiştirebilirsiniz gerekir.

  text

için "<div class='special'>text</div>" dönüştürülebilir shold

Bu kolaydır:

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

Ancak

  line1
  line2

Dönüştürülür

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

Gerçi

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

gereklidir.

Bu nasıl sağlanabilir?

2 Cevap

Değiştirmek

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

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

Ama bu dönüştürme

  line1
  line2

Bunun için:

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

Eğer boşluk kaldırmak istiyorsanız, size, metin maç boşlukları kaldırın ve sonra değiştirmeniz gerekir.

Birden çok çizgi yakalayabilir böylece "s" (dotall) desen değiştirici kullanmak isteyeceksiniz. Sonra eşleştirerek hırs durdurmak "satır iki boşluk dışında bir şey tarafından takip"

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

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


echo $text;

Çıkışlar:

<div class='special'>Line One
  Line Two
  Line Three
</div>