0

如何将以下函数与中间的段匹配("/(\w+)\")以允许使用字母数字 & 等 URL 字符_.-

if(preg_match('/^\/segment1\/(\w+)\/segment2/', '/segment1/aAbB0123.-_Z/segment2', $match)) {                       
    print_r($match);
    /*
    * Array
    (
        [0] => /segment1/s/segment2
        [1] => aAbB0123.-_Z
    )
    *
}
4

1 回答 1

1

您的模式还有另一个问题,它需要在末尾使用正斜杠,而您的输入没有。我什至不会让它成为可选的,只是完全忽略它,你不能得到比这更多的可选。

您的目标是验证还是捕获中间部分?我假设捕获,因为在您的示例中没有其他理由拥有子表达式。最好给出几个确切的输入示例以及您实际需要的内容。

所以,你有几个选择。

超级懒惰:

segment1/(.*?)/segment2

一个细分市场,也超级懒惰:

segment1/([^/]+)/segment2

确切要求(找出你想要的 URL,我很确定你列出的一些字符在 URL 中是不允许的,只是在 Querystring 中):

segment1/([-\w&.%=#]+)/segment2

允许多段,懒惰:

segment1/((?:[^/]+/?)+)/segment2

允许多个细分,确切要求:

segment1/((?:[-\w&.%=#]+/?)+)/segment2

根据您的设置,您可能需要逃避一些事情。

于 2013-05-24T19:45:49.073 回答