preg_match通配符,需要至少一个字符

dir*_*irk 3 php regex preg-match

下面的 preg_match 将“空”(0 个字符)与通配符进行匹配。我想禁用它:

preg_match('/site.com\/subsection\/.*?/', $page_url);
Run Code Online (Sandbox Code Playgroud)

所以上面的内容应该匹配 site.com/subsection/subpage,但不应该匹配根目录 site.com/subsection/

如何调整上面的正则表达式?提前致谢!

Wik*_*żew 5

.*?模式末尾的 与空字符串匹配。您需要使用以下命令使其匹配一个或多个字符.+

'/site\.com\/subsection\/.+/'
                         ^
Run Code Online (Sandbox Code Playgroud)

现在,它之后至少需要 1 个字符site.com/subsection/

请注意,必须对点进行转义以匹配文字点。

另外,如果模式本身有很多斜杠,那么使用正则表达式分隔符/(正如OcuS在下面的评论中建议的那样)可能是个好主意。我通常使用波浪号:

'~site\.com/subsection/.+~'
Run Code Online (Sandbox Code Playgroud)