PHP:Regex,用于匹配具有特定模式和一个可选通配符的URL


PHP: Regex for Matching URLs with a Certain Pattern and One Optional Wildcard

也许这个问题已经在这个网站的某个地方得到了回答,但我不确定,因为我不擅长regex。事实上,我想我的问题是非常非常基本的。我需要检查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和一个通配符,该通配符可以是空的,也可以包含数字。

谢谢你,很抱歉我不能解决这个非常基本的问题。

/^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、斜杠、冒号、句点和短划线是否需要转义,因为它们在regex语法中有特殊含义(斜杠是一个常见的分隔符,句点==几乎是任何字符,?后面的冒号可以解释为条件匹配的一部分,…)
  • file[0-9]*'.html$:匹配file和no,或字符串后面的任意数字,因此这将匹配filefile1以及file0file00000123434。然后匹配.htm$确保这是您试图匹配的字符串的末尾

就是这样,真的。一个相当生硬的正则表达式。您也可以添加更多的灵活性,例如,允许html和htm作为字符串的末尾,就像表达式允许http和https:'.html?$一样。还有其他方法可以写同样的东西:'.html{0,1}:在末尾匹配0或1L。甚至:.[html]{3,4},它匹配"group""html":htm,html中的3或4个字符,但也匹配hhh,htth等…

玩它,玩得开心。一旦掌握了的基本知识,Regex就不会那么难了