假设我有这个字符串:
some striinnngggg <a href="something/some_number">linkk</a> soooo <a href="someotherthing/not_number">asdfsadf</a>
我想从包含标记格式<a href="something/some_number"></a>
的字符串中删除标记,而不剥离该标记的内容,其中some_number可以是任意数字
因此,在上面的示例中,所需的最终结果是
some striinnngggg linkk soooo <a href="someotherthing/not_number">asdfsadf</a>
注意第二个标签没有被剥离,因为链接的第二部分不是数字
如何使用regex / php的preg函数
完成此操作答案 0 :(得分:2)
使用正则表达式检测此类标记非常复杂,因为属性的顺序可能会发生变化,值可以用双引号,简单引号或无引号分隔。
我认为更简单的方法是使用DOMDocument查找匹配的标记:
$dom = new DOMDocument;
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $link) {
if (preg_match("/[a-zA-Z0-9]+\/[0-9]+/", $link->getAttribute('href'))) {
echo $link->nodeValue; // do whatever you need to do with the string here
}
}
答案 1 :(得分:1)
表达式:
(<a.+?href=".*?\d.*?".*?>)(.+?)(</a>)
找到它,并替换为第二个令牌(取决于您的语言可能是$2
或\1
或\2
),这只是链接文字。