你可能熟悉文本查找,即按下Ctrl-F,输入你要查找的词。“正则表达式”更进一步,它们让你指定要查找的“模式”。你也许不知道一家公司的准确电话号码,但如果你住在美国或加拿大,你就知道它有3位数字,然后是一个短横线,然后是4位数字(有时候以3位区号开始)。因此作为一个人,你看到一个电话号码就知道:415-555-1234是电话号码,但4,155,551,234不是。
正则表达式很有用,但如果不是程序员,很少会有人了解它,尽管大多数现代文本编辑器和文字处理器(诸如微软的Word或OpenOffice),都有查找和查找替换功能,可以根据正则表达式查找。正则表达式可以节约大量时间,不仅适用于软件用户,也适用于程序员。实际上,技术作家Cory Doctorow声称,甚至应该在教授编程之前,先教授正则表达式:“知道[正则表达式]可能意味着用3步解决一个问题,而不是用3000步。如果你是一个技术怪侠,别忘了你用几次击键就能解决的问题,其他人需要数天的烦琐工作才能解决,而且他们容易犯错。”11Cory Doctorow, “Here’s what ICT should really teach kids: how to do regular expressions,”Guardian, December 4, 2012,http://www.theguardian.com/technology/2012/dec/04/ict-teach-kids-regular-expressions/.
在本章中,你将从编写一个程序开始,先不用正则表达式来寻找文本模式。然后再看看,使用正则表达式让代码变得多么简洁。我将展示用正则表达式进行基本匹配,然后转向一些更强大的功能,诸如字符串替换,以及创建你自己的字符类型。最后,在本章末尾,你将编写一个程序,从一段文本中自动提取电话号码和E-mail地址。