Regex将文本移动到关联的锚点并将其包裹在跨度中


Regex to move text to an associated anchor and wrap it in a span

我当前的HTML输出如下:

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

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

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

输出总是和我发布的格式一样。我只是想去掉()并将其包装在span中,并将其放置在HTML结构中,不需要任何空间作为锚点。

(没有尝试任何东西,因为我对regex一无所知)

谢谢。

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

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

我将使用,而不是使用像.+?这样的非贪婪量词来使用句点,因为它不会匹配所有内容(比如换行符)

  • 不匹配字符类[^blah]
  • 并考虑到标签元素之间的空白在HTML中有效(如示例输入中所示)

Regex:

(<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>