RegEx(php) - 在多行替换中联合行

时间:2010-04-11 17:47:35

标签: php regex

我需要更改从行首开始有两个空格的所有文本的背景。

  text

shold转换为“<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 个答案:

答案 0 :(得分:1)

您需要使用“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>

答案 1 :(得分:0)

替换

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

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

但这会转换

  line1
  line2

到此:

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

如果要删除空格,则应匹配文本,删除空格然后替换。