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

Php 什么';解决这个问题的正则表达式是什么?,php,regex,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/ 如何使用正则表达

我有一个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/
如何使用正则表达式分离这些URL并将其推送到另一个数组:

http://example.com/apps/1235554/
http://example.com/apps/126734
http://example.com/apps/2331234/
只应选择带有
apps/{number}/
apps/{number}
的url。

假设您没有使用“/”作为正则表达式分隔符来忽略转义问题,这将起到以下作用:

   "^http://example.com/apps/\d+/?$"
或更具限制性:

~apps/[0-9]+(/|$)~

匹配斜杠或字符串结尾。

^http://example\.com/apps/\d+\b
-
apps
然后是斜杠,然后是一些数字,然后是单词边界,即不是字母字符。

您也可以使用负向前看将所有不需要的行替换为空字符串:

替换

http://example\.com/(?!apps/[0-9]+).*


如果希望仅保留带有/app/(某个数字)且可选以斜杠结尾的URL,可以使用如下循环:

for ($i = count($urls); $i-->0 ;) {
    if (!preg_match('-/apps/\d+/?$-', $urls[$i])) unset($urls[$i]);
}   
它可以就地清理阵列,而无需使用临时阵列。 我假设主机名不是常量,否则您可以使用以下命令更改regexp:

'-^http://www.example.com/apps/\d+/?$-'

我替换了标准的
/
regexp分隔符,这样我就不必转义URL的斜杠。

啊,是的,你需要确保在末尾有一个行尾字符。我来编辑;谢谢。别忘了锚定:
“^http://example.com/apps/\d+/?$”
–否则它将匹配nailxx的示例。
for ($i = count($urls); $i-->0 ;) {
    if (!preg_match('-/apps/\d+/?$-', $urls[$i])) unset($urls[$i]);
}   
'-^http://www.example.com/apps/\d+/?$-'