PHP 正则表达式 : match text urls until space or end of string

标签 php regex parsing preg-match preg-match-all

这是文本示例:

$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/

相关文章:

Docker libpq5 依赖问题中的 PHP 和 Postgresql

php - 多上传工具、脚本或插件?

php - 如何通过 PHP 处理 SELECT 1 的结果?

javascript - 正则表达式返回特殊字符的意外结果

python - 为文本文件上的每个单词和符号添加引号

regex - Perl 拆分和正则表达式

objective-c - NSJSONSerialization 仅获取根 key

java - 在 Java 中拆分字符串的最有效方法

javascript - 使用数据表添加复选框

java - 如何将 XML 文档导出到文件系统