认识正则表达式

所谓语言之语言——元语言

所谓认知之认知——元认知

所谓程序之程序——元程序

今天来看一看字符串,

字符串之字符串——元字符串,其实是正则表达式

正则表达式是为描述字符串的字符串,实际上是给字符串定义了一系列规则,用处在于可以高效地进行字符串匹配
例如,email地址是个符合特定规则的字符串,用户注册时填写的email地址是不是合法呢?将合法email的规则用正则表达式表示出来,则立即可以检验用户输入的字符串了。

接下来的问题是,正则表达式都有哪些规则?然后列出1,2,3……全都背下来就学会正则了。问题是太懒,没心思背。

不如退回来,以设计正则表达式的思路来想,正则表达式是字符串的字符串,怎样用最简洁的规则能描述所有的字符串呢?就像欧几里得用五条公理定义出整个几何世界一样!

想想怎样用化学式表示万事万物的?规则的意义在于归类,首先要将万事万物分到不可再分的元素,才能从中寻出规律,组成化学式。字符串的原子结构很明了,就是字符,按照ASCII标准,一共255个,可做简单分类:数字、字母、其他符号。

字符已归类,接下来直接匹配,\d匹配一个数字(digit),\w匹配一个字母或数字(word),何意?规则的本质在于映射,用简易表达式映射繁复字符串,就是正则表达式做的事情。所以,正则表达式能够「以一映射多」,当然也能「以短映射长」,例如:

  • \d{5}匹配5个数字
  • \w{3,8}匹配3到8个字母或数字
  • A+匹配1个或多个A