如何将http://或www替换为<;a href。。在PHP中
我创建了这个正则表达式如何将http://或www替换为<;a href。。在PHP中,php,regex,preg-replace,Php,Regex,Preg Replace,我创建了这个正则表达式 (www|http://)[^ ]+ 那场比赛每天都举行http://... 或www。。。。但是我不知道如何让preg_替换工作正常,我已经试过了 preg_replace('/((www|http://)[^ ]+)/', '<a href="\1">\1</a>', $str); preg_replace('/((www | http:/)[^]+)/,'$str); 但是它不起作用,结果是空字符串。preg_replace(“!”((
(www|http://)[^ ]+
那场比赛每天都举行http://... 或www。。。。但是我不知道如何让preg_替换工作正常,我已经试过了
preg_replace('/((www|http://)[^ ]+)/', '<a href="\1">\1</a>', $str);
preg_replace('/((www | http:/)[^]+)/,'$str);
但是它不起作用,结果是空字符串。preg_replace(“!”((?:www | http://)[^]+)!”,“$str);
preg_replace('!((?:www|http://)[^ ]+)!', '<a href="\1">\1</a>', $str);
当您使用/
作为模式定界符时,在模式中使用/
将不会很好。我用解决了这个问题
作为模式分隔符,但可以使用反斜杠来转义斜杠
我也不明白你为什么要做两个帕伦捕获,所以我删除了其中一个
你的处境中的部分问题是你在跑步时警告被压制;如果您启用了
error\u reporting(E\u ALL)
,您就会看到PHP试图在正则表达式中生成有关分隔符问题的消息。您的主要问题似乎是将所有内容都放在括号中,因此它不知道“\1”是什么。此外,您还需要避开“/”。所以试试这个:
preg\u replace('/(www | http:\/\/[^]+)/',''$str)代码>
编辑:实际上括号似乎不是问题,我看错了。正如其他人也指出的那样,逃跑仍然是一个问题。这两种解决方案都应该有效。您需要在正则表达式中转义斜杠,因为您使用斜杠作为分隔符。您还可以使用另一个符号作为分隔符
// escaped
preg_replace('/((www|http:\/\/)[^ ]+)/', '<a href="\1">\1</a>', $str);
// another delimiter, '@'
preg_replace('@((www|http://)[^ ]+)@', '<a href="\1">\1</a>', $str);
//转义
preg|u replace('/((www | http:\/\/)[^]+)/',''$str);
//另一个分隔符“@”
preg_replace('@((www | http:/)[^]+)@,'$str);
当使用其他用户提供的正则表达式代码时,请确保添加“i”标志以启用大小写不敏感,这样它将同时适用于HTTP://和HTTP://。例如,使用chaos的代码:
preg_replace('!(www|http://[^ ]+)!i', '<a href="\1">\1</a>', $str);
preg_replace('!(www | http://[^]+)!i','$str);
首先,您需要退出,或者更好的是,按照其他答案中的解释,更换测厚仪
preg_replace('~((www|http://)[^ ]+)~', '<a href="\1">\1</a>', $str);
第三,不必要地使用捕获括号,这只会减慢速度。摆脱他们。不要忘记将$1
更新为$0
。如果您想知道,这些是非捕获括号:(?:)
如果字符串a中包含多个url,且以换行符而不是空格分隔,则必须使用\S
preg_replace('/((www|http:\/\/)\S+)/', '<a href="$1">$1</a>', $val);
preg\u replace('/((www.http:\/\/)\S+/”,'$val);
Dup:恭喜!你是唯一一个不会从混沌中复制错误正则表达式的人。它不会自动在www之前添加http://www,所以它不是完全正确的:www.google.com将成为。。。而不是不工作时,就结束的网址是至少你可以修复你的代码??它不处理https或任何东西…--preg|u replace('/((www | http:\/\/)[^,\\n]+)/,''$str);当遇到“,”和“换行”时,只需稍加修改就可以停止替换。有趣的是,大多数人都使用了不正确的正则表达式作为示例。我想我们都在复制OP。无论如何,现在已经修复了。我只想补充一点,后面的引用是用左括号编号的。例如,在regexp“T(e(st))”中,\1包含“est”,而\2包含“st”。
preg_replace('~(?:www|http://)[^ ]+~', '<a href="$0">$0</a>', $str);
preg_replace('~(?:www|http://)\S+~', '<a href="$0">$0</a>', $str);
preg_replace('/((www|http:\/\/)\S+)/', '<a href="$1">$1</a>', $val);