查找第一个单词和最后一个单词的匹配项


find match of 1st word and and last

我有一个url,看起来有点像这个

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

我正在尝试验证格式,在我的函数中使用这个regex。

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

$pathInfo是上面给出的url。

基本上我想匹配

  1. 确保目录为for-sale/stuff/
  2. used-bla-bla2-bla3-bla4-(bla5)---f10-85934.html文件必须以used/new开头,以integer.html结尾
  3. 不允许有空格

在我验证之后,我想获得ID。在这种情况下,它是85934

看起来你想要这样的东西,

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

演示

我建议使用这段示例代码和以下正则表达式:

$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);

Regex:'bfor'-sale'/stuff'/[^<> ]*?'/(?:used|new)[^/ ]*?'-('d+)'.html'b

我假设在一个可变的文本字符串中有几个URL需要验证,因此我建议使用'b,并且URL在某个标签内,因此我使用[^<> ]*?来限制捕获仅在标签内。

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