Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以在php中使用正则表达式替换URL?_Php_Regex_Preg Replace - Fatal编程技术网

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

是否可以在php中使用正则表达式替换URL?,php,regex,preg-replace,Php,Regex,Preg Replace,输入文本:我们的网站是 需要输出:我们的网站是 规则:任何url都需要替换为[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

输入文本:
我们的网站是

需要输出:
我们的网站是

规则:任何url都需要替换为[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);
$inputext=”“;
$rule=“/(?\s]+)/i”;
$replacetext=“[X]”;
$outputext=preg_replace($rule,$replacetext,$inputext);
echo($outputext);

谢谢您的建议。

您可以用
http/https
www
或不使用
www
url来获取这些信息吗

<?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;

这个如何抓取,
http/https
www
或不带
www
url

<?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;

永远不要用正则表达式解析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();
$input='我们的网站是';
$replace=“[x]”;
$dom=新的DomDocument();
$dom->loadHTML($input,LIBXML\u HTML\u noimpled | LIBXML\u HTML\u NODEFDTD);
$a=$dom->getElementsByTagName(“a”)->item(0);
$a->setAttribute(“href”、$replace);
$a->textContent=$replace;
echo$dom->saveHTML();

永远不要用正则表达式解析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();
$input='我们的网站是';
$replace=“[x]”;
$dom=新的DomDocument();
$dom->loadHTML($input,LIBXML\u HTML\u noimpled | LIBXML\u HTML\u NODEFDTD);
$a=$dom->getElementsByTagName(“a”)->item(0);
$a->setAttribute(“href”、$replace);
$a->textContent=$replace;
echo$dom->saveHTML();

任何url或
a
标记中的url?尝试
*?“([^”]*)”\>(.*)\
任何url或
a
标记中的url?尝试
*?“([^”]*)”\>(.*)\
您缺少protocol@RobbieAverill呜呜,你能帮我看看我错过了什么吗?我真的不知道我错过了什么请看这个问题:“规则:任何url都需要用[x]替换。url可能是http/https或www,也可能是简单的me.com”@RobbieAverill Ohh是的,先生,现在知道了,我要编辑我的答案并修复它。谢谢:)@RobbieAverill先生编辑了我的答案。希望这将与协议现在工作。谢谢你指出我的错误:)你错过了protocol@RobbieAverill呜呜,你能帮我看看我错过了什么吗?我真的不知道我错过了什么请看这个问题:“规则:任何url都需要用[x]替换。url可能是http/https或www,也可能是简单的me.com”@RobbieAverill Ohh是的,先生,现在知道了,我要编辑我的答案并修复它。谢谢:)@RobbieAverill先生编辑了我的答案。希望这将与协议现在工作。感谢您指出我的错误:),但是如果字符串不包含锚元素,它将不起作用。您的问题提供了示例输入文本,这就是我必须处理的全部内容。但是如果字符串不包含锚元素,它将不起作用。您的问题提供了示例输入文本,这就是我必须处理的全部内容。