今天在看php的书籍时,看到这样一句正则表达式

1
@^/(?P<page>([a-zA-Z_-]+?))/(?P<action>([a-zA-Z_-]+?))/(?P<id>([^/]+?))$@u\

第一眼挺懵逼的(n+1眼也是懵逼),但是作为一个啥都没有青年,看到自己不懂的东西当然要去查了下,查了才明白这个正则表达式的含义。

他分为有几个重要的部分:

  1. 分割符
  2. 表达式
  3. 子模式
  4. 修饰符

分隔符

在这句表达式,有两个@符号,这两个就是分隔符,分割符中间为表达式,用于匹配字符串

表达式

用于匹配字符串

子模式

在php中使用?P<name>可以在使用这个preg_match()方法进行匹配时获取对应的键值对。
例如:

1
/user-account/view/123

我上面的这个字符串匹配正则表达式,可以获取到几个键值对:

1
2
3
["page"]=> string(12) "user-account" 
["action"]=> string(4) "view"
["id"]=> string(3) "123"

修饰符

在整个表达式的后面有一个u,是不是很奇怪,这个是修饰符,表示要开启某个模式。这个u表示是的utf8.