这是文本示例:
$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 | $],但这也只匹配前两个网址。
答案 0 :(得分:2)
不要试图匹配 \n
(毕竟没有换行符!)而是使用$
(它将匹配字符串的结尾)。
编辑:
我很想知道为什么我最初的想法不起作用,所以万一你知道,请告诉我。我猜是因为[]
试图匹配一个字符,而行尾不是一个? :)
这个会起作用:
preg_match_all('#http://(\S+)#is', $text, $m);
请注意,您不必转义/因为它们不是分隔符,但是您必须转义\
,因为您正在使用双引号(因此解析字符串) 。相反,我使用单引号。
答案 1 :(得分:0)
我不熟悉PHP,所以我没有确切的语法,但也许这会给你一些尝试。 []表示一个字符类,所以| $将逐字寻找$。我认为你需要的是另一个向前看,所以这样的事情:
#http:\/\/(.*)(?=(\s|$))
如果有这种情况,我道歉,但也许它会给你另一个尝试的角度。
答案 2 :(得分:0)
请参阅What is the best regular expression to check if a string is a valid URL?
它有一些很长的正则表达式,可以匹配所有网址。