什么是解决这个问题的正则表达式?

时间:2010-06-17 11:57:50

标签: php regex

我在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}的网址。

5 个答案:

答案 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的斜杠。