0

我有一些文字,例如:

$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>"

如何将单词“text”替换为单词“new”,但仅在 $text 的第一部分?数组 $regexes 的元素(正则表达式)可以是任意数量和顺序。

结果应该是这样的:"<body><div><p>Some new text.</p></div><p>Some test text.</p></body>"

4

1 回答 1

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);

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

要在 set 元素中(即在更大的 HTML 结构中)更具体地编辑文本,请查看Symfony2 DOM Crawler

于 2014-10-08T09:41:27.127 回答