这是文本示例:
$text = "asd dasjfd fdsfsd http://11111.com/asdasd/?s=423%423%2F gfsdf http://22222.com/asdasd/?s=423%423%2F
asdfggasd http://3333333.com/asdasd/?s=423%423%2F";
这是我的正则表达式模式:
preg_match_all( "#http:\/\/(.*?)[\s|\n]#is", $text, $m );
那匹配前两个网址,但我如何匹配最后一个?我尝试添加 [\s|\n|$] 但这也只会匹配前两个网址。
最佳答案
不要试图匹配 \n
(毕竟没有换行符!)而是使用 $
(这将匹配到字符串的末尾)。
编辑:
我很想知道为什么我最初的想法不起作用,所以如果你知道,请告诉我。我猜是因为 []
尝试匹配一个字符,而行尾不是一个? :)
这将工作:
preg_match_all('#http://(\S+)#is', $text, $m);
请注意,您不必转义/因为它们不是分隔符,但您必须转义
\
因为你使用双引号(所以字符串被解析)。相反,我为此使用了单引号。
关于PHP 正则表达式 : match text urls until space or end of string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11073692/