我创建了这个正则表达式
(www|http://)[^ ]+
匹配每个http://...或www....但我不知道如何让 preg_replace 起作用,我试过了
preg_replace('/((www|http://)[^ ]+)/', '<a href="\1">\1</a>', $str);
但它不起作用,结果是空字符串。
我创建了这个正则表达式
(www|http://)[^ ]+
匹配每个http://...或www....但我不知道如何让 preg_replace 起作用,我试过了
preg_replace('/((www|http://)[
我创建了这个正则表达式
(www|http://)[^ ]+
匹配每个http://...或www....但我不知道如何让 preg_replace 起作用,我试过了
preg_replace('/((www|http://)[^ ]+)/', '<a href="\1">\1</a>', $str);
但它不起作用,结果是空字符串。
preg_replace('!((?:www|http://)[^ ]+)!', '<a href="\1">\1</a>', $str);
当您将/
其用作模式分隔符时,/
在您的模式中使用将无法正常工作。我通过使用!
作为模式分隔符解决了这个问题,但是你可以用反斜杠来转义你的斜杠。
我也看不出你为什么要进行两次paren捕获,所以我删除了其中一个。
您遇到的部分问题是您在运行时会抑制警告。如果你有error_reporting(E_ALL)
,你会看到 PHP 试图在你的正则表达式中生成关于你的分隔符问题的消息。
您需要转义正则表达式中的斜杠,因为您使用斜杠作为分隔符。您也可以使用另一个符号作为分隔符。
// escaped
preg_replace('/((www|http:\/\/)[^ ]+)/', '<a href="\1">\1</a>', $str);
// another delimiter, '@'
preg_replace('@((www|http://)[^ ]+)@', '<a href="\1">\1</a>', $str);
使用其他用户提供的正则表达式代码时,请务必添加“i”标志以启用不区分大小写,因此它适用于 HTTP:// 和 http://。例如,使用 Chaos 的代码:
preg_replace('!(www|http://[^ ]+)!i', '<a href="\1">\1</a>', $str);
您的主要问题似乎是您将所有内容都放在括号中,因此它不知道“\1”是什么。此外,您需要转义“/”。所以试试这个:
preg_replace('/(www|http:\/\/[^ ]+)/', '<a href="\1">\1</a>', $str);
编辑:实际上括号似乎不是问题,我误读了它。正如其他人也指出的那样,逃跑仍然是一个问题。任何一种解决方案都应该有效。
如果字符串 a 中包含多个 url,由换行符而不是空格分隔,则必须使用 \S
preg_replace('/((www|http:\/\/)\S+)/', '<a href="$1">$1</a>', $val);
preg_replace('!((?:www|http://)[^ ]+)!', '<a href="\1">\1</a>', $str);
当您将/
其用作模式分隔符时,/
在您的模式中使用将无法正常工作。我通过使用!
作为模式分隔符解决了这个问题,但是你可以用反斜杠来转义你的斜杠。
我也看不出你为什么要进行两次paren捕获,所以我删除了其中一个。
您遇到的部分问题是您在运行时会抑制警告。如果你有error_reporting(E_ALL)
,你会看到 PHP 试图在你的正则表达式中生成关于你的分隔符问题的消息。