我正在尝试编写一个函数,以便在URL之前和之后向字符串插入内容(如果有)。例如,字符串可能是这样的
"This is a string and some links, http://www.abc.com/xyz.html&p=123 and the other link is http://www.xyz.com/abc.html&x=2, that's all."
我想将其更改为(在URL之前和之后添加一些html标签)
"This is a string and some links, <a href="...">http://www.abc.com/xyz.html&p=123</a> and the other link is <a href="...">http://www.xyz.com/abc.html&x=2</a >, that's all."
我实际上通过使用string.find()来查找http并以递归方式解析字符串,之前写了一个Lua函数来做类似的事情。
我对PHP比较陌生,想知道PHP是否有更容易执行此任务的功能或技术?
答案 0 :(得分:2)
这里的问题是结束字符。例如,“我去了http://example.com/。我找到了......”或“你去过http://example.com/吗?”
现在,如果您可以假设网址末尾始终有空格并且始终以http://开头,请尝试以下操作:
$url = preg_replace('/(https?:\/\/[^ ]+) /', '<a href="$1">$1</a>', $url);
答案 1 :(得分:1)
这是一个开始。但请记住,您可能会遇到一些问题。我会在代码之后说出来。
$text = "This is a string and some links, http://www.abc.com/xyz.html&p=123 and the other link is http://www.xyz.com/abc.html&x=2";
preg_replace("/(http:)([^ ,]*)/", "<a href=\"$1$2\">$1$2</a>", $text);
你可以遇到的问题是当你在一个url之后有一些字符串就像你的示例文本一样:This is a string and some links, http://www.abc.com/xyz.html&p=123 and the other link is http://www.xyz.com/abc.html&x=2, that's all.
在一个url之后有一个逗号,所以你必须把它放到你的正则表达式中id在我的回答中做了一些改变你的文字。
在我的表达式中,我正在考虑URL以http
开头,并以任何非空格字符(或者在您的特定情况下为逗号)结束。