0

現在、HTML出力は次のとおりです。

<a href="#">Coats</a> (12)

私がやりたいのは、次のような方法で数値をアンカー内に移動する正規表現または操作です。

<a href="#">Coats<span>12</span></a>

出力は常に私が投稿したのと同じ形式です。( ) を削除してスパンでラップし、アンカー用の HTML 構造内にスペースを入れずに配置するだけです。

(正規表現について何も知らないので、何も試しませんでした)

ありがとうございました。

4

2 に答える 2

3
 $html = preg_replace('|<a href="(.+?)">(.+?)</a> \((\d+?)\)|i', 
         '<a href="$1">$2<span>$3</span></a>', $html);

通常、HTML の操作に正規表現を使用しないでください。

于 2012-09-12T14:10:28.257 に答える
0

.+?すべてに一致しないような貪欲でない量指定子 (改行など) でピリオドを使用する代わりに、次のように使用します。

  • 一致しない文字クラス[^blah]
  • HTMLで有効であることを考慮して、タグの要素間の空白に注意してください(サンプル入力に示されているように)

正規表現:

(<a\s*href[^>]+>[^<]+)(<\/a>)\s*\(([^)]+)\)

と置換する:

$1<span>$3</span>$2

ここでテストします:

http://regexr.com?324j8

PHP コード:

<?php
echo preg_replace('/(<a\s*href[^>]+>[^<]+)(<\/a>)\s*\(([^)]+)\)/','$1<span>$3</span>$2','<a href="#">Coats</a> (12)');
?>

サンプル入力:

<a href="#">Coats</a> (12)
<a  href="#">Coats</a> (35)
<a href ="#">Coats</a>   (234546)
<a    href= "#">Coats</a>(1)
<a href="#" >Coats</a> (BlahBlah)  

サンプル出力:

<a href="#">Coats<span>12</span></a>
<a href="#">Coats<span>35</span></a>
<a href ="#">Coats<span>234546</span></a>
<a href= "#">Coats<span>1</span></a>
<a href="#" >Coats<span>BlahBlah</span></a>
于 2012-09-12T14:46:32.313 に答える