【问题标题】:PHP: Regex for Matching URLs with a Certain Pattern and One Optional WildcardPHP:用于匹配具有特定模式和一个可选通配符的 URL 的正则表达式
【发布时间】:2012-09-10 09:58:10
【问题描述】:

也许这个问题已经在这个网站的某个地方得到了回答,但我不确定,因为我不擅长正则表达式。事实上,我猜我的问题是非常非常基本的。 我需要检查 URL 是否与以下模式匹配:

'http://www.my-domain.com/dir/file.htm'
'http://www.my-domain.com/dir/file2.htm'
'http://www.my-domain.com/dir/file3.htm'

所以基本上,我只需要一个简单的正则表达式模式来匹配带有一个可以为空或包含数字的通配符的 URL。

感谢您,并为我无法解决这个非常基本的问题感到抱歉。

【问题讨论】:

  • 你想达到什么目的? URL 上的 Usign 正则表达式似乎不是真正的任务……
  • 实际上我有一个数组,其中包含使用 Curl 和 Xpath 从网页中抓取的大量 URL。

标签: php regex url wildcard


【解决方案1】:

/^https?\:\/\/www\.my\-domain\.com\/dir\/file[0-9]*\.htm$/ 匹配所有示例字符串:

if (preg_match('/^https?\:\/\/www\.my\-domain\.com\/dir\/file[0-9]*\.htm$/',$url,$matches))
{
    var_dump($matches);
}

由于您不清楚(或不清楚)正则表达式:这就是该表达式的作用:

  • ^https?:检查天气是否以http开头,并允许可选的s
  • \:\/\/www\.my\-domain\.com\/dir\/file:验证实际的基本 url,斜线、冒号、点和破折号需要转义,因为它们在正则表达式语法中的特殊含义(斜线是常见的分隔符,点 == 几乎任何字符,? 后面的冒号可以被解释为条件匹配的一部分,...)
  • file[0-9]*\.html$:匹配 file 和字符串后面的任何数字或数字,因此这将匹配 filefile1 以及 file0file00000123434。然后匹配.htm$ 确保这是您尝试匹配的字符串的结尾。

就是这样,真的。一个非常严格的正则表达式。您也可以添加更多的 flex,方法是(例如)允许 html 和 htm 作为字符串的结尾,就像表达式允许 http 和 https 一样:\.html?$。还有其他方法可以编写相同的内容:\.html{0,1}:匹配末尾的 0 或 1 l。甚至:.[html]{3,4} 匹配 "group" 中的 3 个或 4 个字符 "html": htm, html 但也有 hhh, htth 等...

玩它,玩得开心。一旦掌握了基础知识,正则表达式就不会那么难了

【讨论】:

  • 实际上我有一个数组,其中包含使用 Curl 和 Xpath 从网页中抓取的大量 URL。 – 我只想将那些与特定模式匹配的 url 保留在数组中。除了正则表达式,我什么都清楚。
  • @MatejGolian:添加了一些关于正则表达式如何工作的解释,因此您可以根据自己的喜好对其进行调整
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多