Php 预匹配:/usersname或/username/foo
我想预先匹配以下URI。注意用户名是:[\w]{1,15}Php 预匹配:/usersname或/username/foo,php,regex,preg-match,Php,Regex,Preg Match,我想预先匹配以下URI。注意用户名是:[\w]{1,15} /username /username/foo /usersname/bar 我希望这些失败 /username/anythingelse 用户名是必需的,因此如果只提供了用户名,则preg_匹配应该有效,然后检查后面的内容是否为foo或bar preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString) 你可能知道我的预赛失败了。如何解决此问题?使用括号指定一组备选方案 大
/username
/username/foo
/usersname/bar
我希望这些失败
/username/anythingelse
用户名是必需的,因此如果只提供了用户名,则preg_匹配应该有效,然后检查后面的内容是否为foo
或bar
preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString)
你可能知道我的预赛失败了。如何解决此问题?使用括号指定一组备选方案 大括号仅用于限制重复
{min,max}
^\/\w{1,15}(\/foo |\/bar)$
=>
上面,我们允许\w
1最多15次(\w
匹配任何单词字符[a-zA-Z0-9])
后跟\/foo
或\/bar
^
和$
指定字符串的开头和结尾,这意味着正则表达式必须匹配完整字符串,而不仅仅是其中的一部分
您可以阅读更多关于:
'{^\/(\w{1,15})(/foo|/bar)?$}'
我已将您的
([\w]+){1,15}
替换为(\w{1,15})
:您的模式也将用户名匹配为15个以上字符,因为它搜索重复1到15次的“多个单词中的一个”,但“多个单词中的一个”也将匹配16个字符的单词!花括号前的斜杠与“username”和“username/foo”不匹配(最终与“username//foo”匹配)。花括号太多了!