preg_match:/ usersname或/ username / foo

时间:2016-02-06 23:35:10

标签: php regex preg-match

我想要preg_match以下URI。注意用户名是:[\ w] {1,15}

/username
/username/foo
/usersname/bar

我希望这些失败

/username/anythingelse

用户名是必填项,因此如果只提供用户名,则preg_match应该有效,然后检查以后是否有foobar

preg_match('{^\/([\w]+){1,15}/{/foo|/bar}?$}', $uriString)

你可能会告诉我的preg_match失败。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用括号指定一组备选方案;

大括号仅用于限制重复{min,max}

^\/\w{1,15}(\/foo|\/bar)?$ ==> DEMO

以上,我们允许\w 1最多15次(\w匹配任何单词字符[a-zA-Z0-9 _])

后跟\/foo\/bar

^$指定字符串的开头和结尾,这意味着正则表达式必须匹配整个字符串而不仅仅是其中的一部分

您可以阅读更多关于:

的信息

答案 1 :(得分:1)

你可以使用大括号!

您不能使用花括号进行分组,您必须使用标准括号;试试这个:

'{^\/(\w{1,15})(/foo|/bar)?$}'

eval.in demo

我已将([\w]+){1,15}替换为(\w{1,15}):您的模式匹配也包含超过15个字符的用户名,因为它搜索“一个或多个单词字符”重复1到15次,但是更多'匹配16个字符的单词!大括号之前的斜杠与“用户名”不匹配'还有' username / foo' (它最终匹配'用户名// foo')。