我在PHP中有一个数组,其中包含以下URL:
http://example.com/apps/1235554/
http://example.com/apps/apple/
http://example.com/apps/126734
http://example.com/images/a.jpg
http://example.com/images/b.jpg
http://example.com/apps/2331234/
http://example.com/apps/orange/
如何使用Regex分离出这些网址并将它们推送到另一个数组:
http://example.com/apps/1235554/
http://example.com/apps/126734
http://example.com/apps/2331234/
只应选择apps/{number}/
和apps/{number}
的网址。
答案 0 :(得分:4)
假设您没有使用“/”作为正则表达式分隔符来忽略转义问题,这将解决这个问题:
"^http://example.com/apps/\d+/?$"
答案 1 :(得分:1)
foreach ($urls as $url)
{
if (preg_match('~apps/[0-9]~', $url)) echo $url;
}
或更严格的限制:
~apps/[0-9]+(/|$)~
匹配斜杠或字符串的结尾。
答案 2 :(得分:0)
^http://example\.com/apps/\d+\b
- apps
然后斜线,然后是一些数字,然后是字边界,即不是字母字符。
答案 3 :(得分:0)
您也可以使用否定前瞻来替换所有不符合空字符串的行:
替换
http://example\.com/(?!apps/[0-9]+).*
使用
''
答案 4 :(得分:0)
如果你想只保留带有/ app /(某个数字)的URL和可选的斜杠结尾,你可以使用这样的循环:
for ($i = count($urls); $i-->0 ;) {
if (!preg_match('-/apps/\d+/?$-', $urls[$i])) unset($urls[$i]);
}
它可以就地清理阵列,而无需使用临时阵列。 我假设主机名不是常量,否则你可以用:
更改正则表达式'-^http://www.example.com/apps/\d+/?$-'
我替换了标准/
正则表达式分隔符,以便我不必转义URL的斜杠。