PHP preg_replace里面的文本块

时间:2014-10-08 09:29:53

标签: php nested preg-replace preg-match multiple-matches

我有一些文字,例如:

$text="<body><div><p>Some test text.</p></div><p>Some test text.</p></body>";

我有一系列正则表达式:

$regexes = array(
  0 => '/<div>.*<\/div>/',
  1 => '/<p>.*<\/p>/')
;

我需要在旋转中应用每个正则表达式来源$ text以及在找到的块中进行一些替换。

例如:

$result = $text;
foreach ($regexes as $reg) {
  preg_match($reg, $result, $matches);
  $result = $matches[0];
}

返回"<p>Some test text.</p>"

如何替换word&#34; text&#34;单词&#34; new&#34;但只在$ text的第一部分? 数组$ regexes的元素(正则表达式)可以是任何数量和顺序。

结果应如下所示:"<body><div><p>Some new text.</p></div><p>Some test text.</p></body>"

1 个答案:

答案 0 :(得分:0)

这里最好的事情就是将你的部分分开;我想这个例子将应用于更大的块,不幸的是,在替换算法中很难通用 - 每种格式都有可能成为你最好的开发方式。

在这种情况下,我假设您基于<div>元素进行拆分。所以我们可以这样做:

$elements = explode('</div>',$text);

// in this case your required block is at position [0]

$elements[0]=apply_regex_algorithm($elements[0]);

$text = implode('</div>',$elements);

如上所述,您的拆分方式必须根据文本输入方法的方式以及您的具体替换要求而有所不同。

要对设置元素中的文本进行更具体的编辑(即在更大的HTML结构中),请检查Symfony2 DOM Crawler