preg_replace函数PHP的模式

时间:2018-03-25 18:34:01

标签: php preg-replace preg-match

我有span标签的字符串。我需要删除所有内部span class =" reference"标签。我使用以下代码删除字符串部分。字符串部分中的部分数据代码可能有所不同。

$string = 'Some text <span class="reference" data-code="Z22">Data code</span>';
$pattern = "|(?<=<span class=\"reference\" data-code=\"Z22\">)(.*?)(?=<\/span>)|";
$replace = '<a href=""> replaced </a>';

$matches = array();
preg_match_all($pattern, $string, $matches);

foreach ($matches[0] as $value) {
    $string = str_replace($value, $replace, $string);
}

echo $ string;

如果data-code =&#34;将为此脚本设置$ pattern,将是变量&#34;

1 个答案:

答案 0 :(得分:0)

data-code置于正面后方(?<=。如果要创建值变量,可以阅读有关Variable-Width Lookbehind vs. Infinite-Width Lookbehind的答案。

但不建议parse html with regex

您可能会使用像PHP Simple HTML DOM Parser这样的库并修改您的HTML。

例如:

include_once ("simple_html_dom.php");

$data = <<<DATA
Some text <span class="reference" data-code="Z22">Data code</span>
DATA;

$html = str_get_html($data);
$ret = $html->find("span[class=reference]");
foreach ($ret as $node) {
    $node->innertext = '';
}
echo $html->save();

那会给你:

Some text <span class="reference" data-code="Z22"></span>