一种更快的方法来解析PHP中可能有http url的字符串?

时间:2013-11-13 04:25:58

标签: php string parsing

我正在尝试编写一个函数,以便在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是否有更容易执行此任务的功能或技术?

2 个答案:

答案 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开头,并以任何非空格字符(或者在您的特定情况下为逗号)结束。