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

Php 找到第一个单词和最后一个单词的匹配项,php,regex,Php,Regex,我有一个url,看起来像这样 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是上面给出的url 基本上我想要匹配 确保目录为待售目录/stuff/

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

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
是上面给出的url

基本上我想要匹配

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

  • 在我验证之后,我想获取ID。在本例中,ID是
    85934

    似乎您想要这样的东西

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

    我建议使用此示例代码和:

    $re=“~\\b用于\\-sale\\\/stuff\\/[^]*?\\/(?:已用|新)[^/]*?\-(\\d+\\\\.html\\b~”;
    $str=“\n”;
    预匹配全部($re,$str,$MATCHS);
    
    正则表达式:
    \b for \-sale\/stuff\/[^]*?\/(?:used | new)[^/]*?\-(\d+)\.html\b

    我假设在一个可变的文本字符串中有几个URL需要验证,因此我建议使用
    \b
    ,并且URL位于某个标记内,因此我会使用
    [^]*?
    将捕获限制在标记内

    ID将位于第一个捕获组中(由
    \d+
    捕获)。
    空格也是不允许的:
    [^]*?
    ,[^/]*?。

    你是说
    ^for sale/stuff/+/(?:used | new)\S*\d\.html$
    ?@AvinashRaj更新的问题检查我更新的答案。基本上,在我验证之后,我想获得ID。在这种情况下,ID是
    85934
    @user2636556:我更新了regex和链接。因此,第一个捕获组现在可以在regex101.com上使用ID.worked了,但是在我的代码中,
    if(preg\u match('/^for sale/stuff/\S+/(?:used/new)/S*?(\d+)\.html$/gm',$pathInfo,$matches)){
    我得到了这个警告
    警告:preg\u match():未知修饰符't'
    nvm\.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);