我有这个htaccess代码
RewriteRule ^/([uge])/([^/]+)$ /$1/$2/
但我真的不明白[^/]+
做了什么?
我一直在谷歌搜索这段时间,但我无法得到我想要的东西。
答案 0 :(得分:12)
这里有两个基本的正则表达式构造
角色等级
See character classes on regular-expressions.info
[...]
是一个字符类,意味着这个构造匹配类中的一个字符(来自方括号内)。
你的课程以^
开头,它赋予角色类特殊的含义,它是一个否定的角色类([^...]
),意味着匹配任何不属于上课。
<强>量词强>
See quantifiers on regular-expressions.info
+
是一个量词,意思是1或更多
正则表达式的含义
要了解这是做什么的,你还要考虑下一件事,最后是$
。这是一个匹配字符串结尾的锚点。
See anchors on regular-expressions.info
所以([^/]+)$
匹配字符串末尾不是斜杠的所有字符。
您还可以在这里找到basic tutorial
答案 1 :(得分:7)
[^/]
表示任何不匹配/
的字符。
答案 2 :(得分:3)
这意味着:
匹配1个或多个字符,直到找到正斜杠
/
方括号[
和]
在开始时有插入符号^
的任何内容都有否定因此:
之外的任何字符
[^/]
表示除/
以外的1个或多个字符
[^/]+
表示除/
答案 3 :(得分:3)
[any_character]
是一个字符类或字符集charclass Ref。 [^any_character]
是一个否定的字符类或字符集charclass negated Ref。
来自Anchors Ref:
记住
^
也有以下含义:插入符号^匹配字符串中第一个字符(锚点)之前的位置,而不是在Character类中使用。
来自charclass Ref: Metacharacters Inside Character Classes:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(),插入符号(^)和连字符( - )。通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义。要搜索星号或加号,请使用[+ *]。如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做会大大降低可读性。
来自Repitition Ref
+
表示一个或多个字符。
所以,[^/]+
表示匹配/
以外的任何字符。因此,它会匹配,直到遇到/
。
^/([uge])/([^/]+)$
- 字符串应以 /
开头- 后跟字符 u 或 g 或 e
- 后跟 /
- 跟随并以 /
以外的任何字符结束
()
(圆括号)用于:圆形括号创建反向引用Ref
答案 4 :(得分:2)
表达式[^/]
匹配任何不是/
的字符,而量子+
表示量子左边的表达式必须出现在leat一次。