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>削除する必要があることに注意してください。もう 1 つは、"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 に答える