preg_match: /用户名或 /username/foo
preg_match: /usersname or /username/foo
我想要 preg_match 以下 URI。注意用户名是:[\w]{1,15}
/username
/username/foo
/usersname/bar
我希望这些都失败
/username/anythingelse
用户名是强制性的,因此如果只提供用户名,preg_match 应该可以工作,然后检查后面的内容是否是 foo
或 bar
。
preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString)
你大概可以看出我的 preg_match 失败了。我该如何解决这个问题?
使用括号指定一组备选方案;
大括号仅用于限制重复{min,max}
^\/\w{1,15}(\/foo|\/bar)?$
==> DEMO
以上,我们允许\w
1最多出现15次(\w
匹配任何单词字符[a-zA-Z0-9_])
后跟 \/foo
或 \/bar
^
和 $
指定字符串的开始和结束,这意味着正则表达式必须匹配整个字符串,而不仅仅是它的一部分
您可以阅读更多关于:
你什么都用大括号!
不能用大括号分组,必须用标准括号;试试这个:
'{^\/(\w{1,15})(/foo|/bar)?$}'
我已将您的 ([\w]+){1,15}
替换为 (\w{1,15})
:您的模式也匹配超过 15 个字符的用户名,因为它搜索“one of more word chars”重复 1 到 15 次,但是 ' one of more' 也匹配 16 个字符的单词!大括号前的斜线不匹配 'username' 但也不匹配 'username/foo' (它最终匹配 'username//foo')。
我想要 preg_match 以下 URI。注意用户名是:[\w]{1,15}
/username
/username/foo
/usersname/bar
我希望这些都失败
/username/anythingelse
用户名是强制性的,因此如果只提供用户名,preg_match 应该可以工作,然后检查后面的内容是否是 foo
或 bar
。
preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString)
你大概可以看出我的 preg_match 失败了。我该如何解决这个问题?
使用括号指定一组备选方案;
大括号仅用于限制重复{min,max}
^\/\w{1,15}(\/foo|\/bar)?$
==> DEMO
以上,我们允许\w
1最多出现15次(\w
匹配任何单词字符[a-zA-Z0-9_])
后跟 \/foo
或 \/bar
^
和 $
指定字符串的开始和结束,这意味着正则表达式必须匹配整个字符串,而不仅仅是它的一部分
您可以阅读更多关于:
你什么都用大括号!
不能用大括号分组,必须用标准括号;试试这个:
'{^\/(\w{1,15})(/foo|/bar)?$}'
我已将您的 ([\w]+){1,15}
替换为 (\w{1,15})
:您的模式也匹配超过 15 个字符的用户名,因为它搜索“one of more word chars”重复 1 到 15 次,但是 ' one of more' 也匹配 16 个字符的单词!大括号前的斜线不匹配 'username' 但也不匹配 'username/foo' (它最终匹配 'username//foo')。