找到第一个单词和最后一个匹配

时间:2015-03-23 10:52:23

标签: php regex

我有一个看起来像这样的网址

for-sale/stuff/state/used-bla-bla2-bla3-bla4-(bla5)---f10-85934.html

我尝试使用此正则表达式在我的函数中验证格式。

if (preg_match('/(?:^|(?:\-))(\w+)/g', $pathInfo, $matches)) { 
  echo $digit = $matches[0]; 
}

$pathInfo是上面给出的网址。

基本上我想匹配

  1. 确保目录为for-sale/stuff/
  2. used-bla-bla2-bla3-bla4-(bla5)---f10-85934.html文件必须以used / new开头,以integer.html
  3. 结尾
  4. 不允许有空格。
  5. 我验证后,我想获得ID。在这种情况下是85934

2 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

'~^for-sale/stuff/\S+/(?:used|new)\S*?(\d+)\.html$~'

DEMO

答案 1 :(得分:1)

我建议使用此示例代码和following regex

$re = "~\\bfor\\-sale\\/stuff\\/[^<> ]*?\\/(?:used|new)[^/ ]*?\\-(\\d+)\\.html\\b~"; 
$str = "<a href=\"for-sale/stuff/state/used-bla-bla2-bla3-bla4-(bla5)---f10-85934.html\"></a>\n<a href=\"for-sale/stuff/state/new-bla-bla2-bla3-bla4-(bla1)-f90-12344.html\"></a>"; 

preg_match_all($re, $str, $matches);

正则表达式:\bfor\-sale\/stuff\/[^<> ]*?\/(?:used|new)[^/ ]*?\-(\d+)\.html\b

我假设您有几个要在变量文本字符串中验证的网址,因此我建议使用\b,并且该网址位于某个标记内,因此我使用[^<> ]*?以便将捕获限制在标签内部。

ID将位于第一个捕获组中(由\d+捕获)。 还不允许使用空格:[^<> ]*?,[^ /] *?。