1

如何在下面的 html 代码中搜索单词“ Box ”:

<p>Text here ok</p>
<h4>
Box 1.2</h4>
<p>Text here ok</p>

并有如下输出?

<p>Text here ok</p>
<h4><a name="box1.2"></a>Box 1.2</h4>
<p>Text here ok</p>

请注意 和 Box 之间的换行符<h4>需要删除。另一件事是我会有“Box 2.0”、“Box 2.3”等,所以只有“Box”这个词有匹配的模式。

4

2 回答 2

1

这里有一些东西可以帮助你。

<?php
$html = '<p>Text here ok</p>
<h4>
Box 1.2</h4>
<p>Text here ok</p>';

$html = preg_replace_callback('~[\r\n]?Box\s+[\d.]+~', function($match){
    $value  = str_replace(array("\r", "\n"), null, $match[0]);
    $name   = str_replace(' ', null, strtolower($value));
    return sprintf('<a name="%s"></a>%s', $name, $value);
}, $html);

echo $html;

/*
    <p>Text here ok</p>
    <h4><a name="box1.2"></a>Box 1.2</h4>
    <p>Text here ok</p>
*/
于 2013-05-06T08:10:38.527 回答
0

使用 PHP:

$str = '<p>Text here ok</p>
<h4>
Box 1.2</h4>
<p>Text here ok</p>';

$new = preg_replace('/\s*(box)\s*(\d+(:?\.\d+)?)/i', '<a name="$1$2">$1 $2</a>', $str);
echo $new;

解释:

/ #START delimiter
    \s* #match spaces/newlines (optional/several)
    (box) #match "box" and group it (this will be used as $1)
    \s* #match spaces/newlines (optional/several)
    (\d+(:?\.\d+)?) #match a number (decimal part is optional) and group it (this will be used as $2)
/ #END delimiter
i #regex modifier: i => case insensitive
于 2013-05-06T08:33:57.093 回答