Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
如何将http://或www替换为<;a href。。在PHP中_Php_Regex_Preg Replace - Fatal编程技术网

如何将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);