正则表达式将文本移动到关联的锚点并将其包装在跨度中

时间:2012-09-12 14:07:32

标签: php regex

我目前的HTML输出如下:

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

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

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

输出总是与我发布的格式相同。我只是想要消除()并将其包装在span中,并将其放在HTML结构中没有任何空间用于锚点。

(不要尝试任何事情,因为我不知道任何关于正则表达式的内容)

谢谢。

2 个答案:

答案 0 :(得分:3)

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

需要注意的是,正则表达式通常不应用于操作HTML。

答案 1 :(得分: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>