你可能熟悉文本查找,即按下Ctrl-F,输入你要查找的词。 “正则表达式”更进一步,它们让你指定要查找的“模式”。 你也许不知道一家公司的准确电话号码,但如果你住在美国或加拿大, 你就知道它有3位数字,然后是一个短横线,然后是4位数字(有时候以3位区号开始)。 因此作为一个人,你看到一个电话号码就知道: 415-555-1234 是电话号码,但 4,155,551,234 不是。
正则表达式很有用,但如果不是程序员,很少会有人了解它, 尽管大多数现代文本编辑器和文字处理器(诸如微软的Word或OpenOffice/LibreOffcie), 都有查找和查找替换功能,可以根据正则表达式查找。 正则表达式可以节约大量时间,不仅适用于软件用户,也适用于程序员。 实际上,技术作家Cory Doctorow声称,甚至应该在教授编程之前,先教授正则表达式:
“知道[正则表达式]可能意味着用3步解决一个问题, 而不是用3000步。如果你是一个技术怪侠, 别忘了你用几次击键就能解决的问题, 其他人需要数天的烦琐工作才能解决, 而且他们容易犯错。”
在本章中,你将从编写一个程序开始,先不用正则表达式来寻找文本模式。 然后再看看,使用正则表达式让代码变得多么简洁。 我将展示用正则表达式进行基本匹配,然后转向一些更强大的功能,诸如字符串替换, 以及创建你自己的字符类型。
正则表达式是进行文本匹配的工具, 我们的目的是要在目标字符串中查找与给定的正则表达式相匹配的的部分。
在学习本教程过程中,你可以实时的验证所学知识, 这里提供一个在线测试正则表达式的网站, http://tool.oschina.net/regex/
现在通过一个非常简单的例子,向你展示如何使用这个网站, 这可能是你第一次接触正则表达式,我选取一个非常简单的例子
目标字符串: this is a book
正则表达式: book
不要有任何质疑,虽然正则表达式 book
如此简单,与你所见的那些充满了特殊字符的正则表达式相差甚远,
但它的确也是一个正则表达式。
正则表达式,本质就是在描述一段字符串,那些特殊的字符,诸如 \d
, |
.
*
的作用,
只是为了描述较为复杂的字符串,后面的教程将向你展示如何用正则表达式来表示,
描述复杂的字符串。
本教程不会涉及特别复杂的规则,比如贪婪与懒惰,位置指定,因为这些规则在实际应用中很少见, 绝大部分的正则表达式都很简单。