是否可以在php中使用正则表达式替换URL?

时间:2018-10-04 15:54:41

标签: php regex preg-replace

输入文字:Our website is <a href="www.me.com">www.me.com</a>

要求的输出:Our website is <a href="[x]">[x]</a>

规则:任何网址都需要替换为[x]。 URL可能带有http / https或www或只是me.com。解决方案必须不区分大小写

$inputext = "<a href="www.me.com">www.me.com</a>"; 
$rule ="/(?<!a href=\")(?<!src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/i";
$replacetext = "[X]";
$outputext = preg_replace($rule, $replacetext, $inputext);
echo($outputext);

谢谢您的建议。

2 个答案:

答案 0 :(得分:2)

从不使用正则表达式解析HTML。对于这样的工作使用DOM解析器似乎有点过头了,但是可以保证将来避免出现问题。

$input = 'Our website is <a href="www.me.com">www.me.com</a>';
$replace = "[x]";

$dom = new DomDocument();
$dom->loadHTML($input, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$a = $dom->getElementsByTagName("a")->item(0);
$a->setAttribute("href", $replace);
$a->textContent = $replace;
echo $dom->saveHTML();

答案 1 :(得分:1)

使用 ID_Code Status1 Status2 Date 0 A Done Not 01-23-18 1 A Done Done 01-23-18 2 B Not Not 01-24-18 3 B Not Done 01-24-18 4 C Not Not 01-24-18 5 C Not Not 01-25-18 6 C Done Done 01-25-18 或不使用http/https网址www来抓取这个消息怎么样?

www

输出: <?php $re = '/(https?:\/\/|(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?)/mi'; $str = 'Our website is <a href="www.me.com">www.me.com</a>'; $subst = '[x]'; $result = preg_replace($re, $subst, $str); echo $result;

正则表达式 https://regex101.com/r/X4vrOt/2

演示: https://3v4l.org/fFhOk