如何在PHP中使用正则表达式找到完全匹配的内容?

胡安·LT

在PHP中使用正则表达式模式尝试与URL匹配时遇到一些问题。

我的正则表达式:

/article/([0-9A-Za-z]++)/post/([0-9A-Za-z-_]++)

public function matches(Route $route){
    $uri = filter_var(strip_tags($_SERVER['REQUEST_URI']), FILTER_SANITIZE_URL);
    if (preg_match('#' . "/article/([0-9A-Za-z]++)/post/([0-9A-Za-z-_]++)" . '#i', $uri, $this->matches)) {
        return true;
    }
    return false;
}

示例1:有效匹配(良好)

/article/AB545455DSAF54FSA45S4F4/post/FGFG-FGFGF-5FG54FGF-FGFGFG

但也匹配这个(坏):

/article/AB545455DSAF54FSA45S4F4/post/FGFG-FGFGF-5FG54FGF-FGFGFG/fgfg/fgfgfg/fgf

我只想匹配第一个示例,那么我该如何解决?谢谢

蒂姆·比格莱森(Tim Biegeleisen)

在您的正则表达式中添加一个终止锚:

/article/([0-9A-Za-z]+)/post/([0-9A-Za-z-_]+)$
                                             ^^^

锚点将确保在最终组件之后不会出现更多子目录。

public function matches(Route $route){
    $uri = filter_var(strip_tags($_SERVER['REQUEST_URI']), FILTER_SANITIZE_URL);
    if (preg_match('~/article/[0-9A-Za-z]+/post/[0-9A-Za-z_-]+$~", $this->matches)) {
        return true;
    }
    return false;
}

请注意,一次或多次匹配正则表达式中的某项将使用一个加号,而不是两个加号。

我可能在这里没有确切的代码,但是我建议的模式在下面的演示中似乎可以使用。

演示版

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在文档中使用正则表达式对字符串进行完全匹配

如何在php中使用正则表达式?

如何在PHP中使用正则表达式匹配这种类似数组的符号?

如何在PHP中使用正则表达式进行匹配

如何使用正则表达式使用正则表达式匹配以“ $”结尾的内容?

如何在 php 中使用正则表达式接受特定符号后的所有内容

如何在正则表达式中使用 java 找到“2 秒”“1 秒”?

如何在Java中使用正则表达式找到确切的单词?

仅在正则表达式完全匹配时如何匹配正则表达式

如何在emacs中使用正则表达式匹配此字符串?

如何在python中使用正则表达式re.sub()可选匹配组?

如何在Java中使用正则表达式匹配单词

如何在 Python 中使用正则表达式提取指定的匹配项?

如何在javascript中使用正则表达式匹配段落?

如何在Windows中使用正则表达式匹配行尾?

如何在Bash中使用正则表达式匹配空格?

如何在Scala中使用正则表达式进行模式匹配?

如何在C#中使用正则表达式匹配多行

如何在bash中使用正则表达式匹配空白字符?

如何在 Python 中使用正则表达式动态匹配整个单词

如何在C ++中使用正则表达式匹配以下坐标模式?

如何在Javascript中使用正则表达式获取匹配和遗漏的数组?

如何在python中使用正则表达式正确匹配序列?

如何在 UIPath 中使用正则表达式匹配替换

如何在python中使用正则表达式匹配可选的整个电话号码

如何在 Java 中使用正则表达式从名称中删除某些内容?

如何在Java中使用正则表达式从符号中提取内容?

如何在javascript中使用正则表达式检索div中的内容

如何在Scala中使用正则表达式?