如何编写正则表达式来查找URL中的一个目录?

时间:2009-10-03 22:32:10

标签: php regex

这是主题:

http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov

我需要使用正则表达式只是在最后一点之前/(包括最后一次/太多) 937IPiztQG字符串可能会改变;它将包含a-z A-Z 0-9 - _

这是我试过的:

$code = strstr($url, '/http:\/\/www\.mysite\.com\/files\/get\/([A-Za-z0-9]+)./');

编辑:我需要使用正则表达式,因为我实际上并不知道URL。我有这样的字符串......

<a href="http://www.mysite.com/files/get/1B-MenlPW0/my-file.doc">a song</a>
<a href="http://www.mysite.com/files/get/1ZeR5KEo9x/my-song.mp3">more text</a>
<a href="http://www.mysite.com/files/get/8IySvO5gMD/my-video.avi">oh and here goes some more blah blah</a>

我需要它来读取该字符串并切断URL的文件名部分。

6 个答案:

答案 0 :(得分:4)

这里你真的不需要正则表达式。这是一个简单的解决方案:

echo basename(dirname('http://www.mysite.com/files/get/937IPiztQG/the-blah-blah-text-i-dont-need.mov'));
// echoes "937IPiztQG"

另外,我想引用Jamie Zawinski的话:

  

“有些人在面对问题时,会想'我知道,我会使用正则表达式'。”现在他们有两个问题。“

答案 1 :(得分:2)

使用正则表达式似乎太简单了。使用与strrpos类似的内容查找“/”字符的最后一个匹配项,然后使用substr修剪字符串。

答案 2 :(得分:0)

/http:\/\/www.mysite.com\/files\/get\/([^/]+)\/ 

这样的事情怎么样?哪个应该在/.

之前捕获不是/,1次或更多次的任何内容

答案 3 :(得分:0)

strstr()函数不对其任何参数使用正则表达式它是正则表达式替换的错误函数

你在考虑preg_replace()?

但像basename()这样的函数会更合适。

答案 4 :(得分:0)

正则表达式的贪婪将确保此工作正常^.*/

答案 5 :(得分:0)

试试这个

$ok=preg_match('#mysite\.com/files/get/([^/]*)#i',$url,$m);
if($ok) $code=$m[1];

然后好好阅读这些页面

请注意

  • 使用“#”作为分隔符,以避免陷入逃避太多“/”
  • “i”标志使匹配不敏感 (允许更自由的拼写MySite.com域名)
  • $ m捕获结果数组