匹配网址与字母数字,短划线和&强调人物?

时间:2013-05-24 19:23:37

标签: php regex

如何将以下功能与中间("/(\w+)\")中的细分相匹配,以允许包含字母数字和字母组合等网址字符。 _.-

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

1 个答案:

答案 0 :(得分:1)

你的模式还有另外一个问题,它需要一个正斜杠,而你的输入没有。我甚至不会把它作为可选项,只是完全不让它,你不能得到更多可选项。

您的目标是验证,还是捕获中间段?我假设捕获,因为在你的例子中没有其他理由有一个子表达式。提供一些确切的输入示例以及您实际需要的内容将是最好的。

所以,你有几个选择。

超级懒惰:

segment1/(.*?)/segment2

一个子细分,也是超级懒惰:

segment1/([^/]+)/segment2

确切要求(在网址中找出你想要的内容,我很确定你列出的某些字符不允许在网址中,只在Querystring中):

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

允许多个细分,懒惰:

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

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

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

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