如何将以下功能与中间("/(\w+)\")
中的细分相匹配,以允许包含字母数字和字母组合等网址字符。 _.-
?
if(preg_match('/^\/segment1\/(\w+)\/segment2/', '/segment1/aAbB0123.-_Z/segment2', $match)) {
print_r($match);
/*
* Array
(
[0] => /segment1/s/segment2
[1] => aAbB0123.-_Z
)
*
}
答案 0 :(得分:1)
你的模式还有另外一个问题,它需要一个正斜杠,而你的输入没有。我甚至不会把它作为可选项,只是完全不让它,你不能得到更多可选项。
您的目标是验证,还是捕获中间段?我假设捕获,因为在你的例子中没有其他理由有一个子表达式。提供一些确切的输入示例以及您实际需要的内容将是最好的。
所以,你有几个选择。
超级懒惰:
segment1/(.*?)/segment2
一个子细分,也是超级懒惰:
segment1/([^/]+)/segment2
确切要求(在网址中找出你想要的内容,我很确定你列出的某些字符不允许在网址中,只在Querystring中):
segment1/([-\w&.%=#]+)/segment2
允许多个细分,懒惰:
segment1/((?:[^/]+/?)+)/segment2
允许多个细分,确切要求:
segment1/((?:[-\w&.%=#]+/?)+)/segment2
根据您的设置,您可能需要逃避一些事情。