0

我目前的 HTML 输出如下:

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

我想做的是一个正则表达式或以这种方式将数字移动到内部锚点的操作:

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

输出总是与我发布的格式相同。我只是想消除 ( ) 并将其包装在 span 中,并将其放置在 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 回答