在编程处理文本的过程中,经常会需要按照某种规则去查找一些特定的字符串。我们可以利用这些规律,让程序自动做事情。
许多编程语言都支持正则表达式,包括C#、Java、JavaScript、Python、Ruby等主流语言。
历史
1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为"正则集的代数"的表达式,因此采用"正则表达式"这个术语。
随后发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器,并逐渐成为广泛传播的文本编辑形式。
基本规则
先来看无特殊符号的正则表达式,规则是对字符串完全匹配。
在正则表达式中,"\b"代表单词边界。
例如: Hi, I am Hilton from China. Do you like history?
如果正则表达式是“hi”,那么它就可以匹配出文本中所有含有hi的字符。因为是完全匹配,所以每个结果都是“hi”。这两个“hi”分别来自“China”和“history”。默认情况下正则表达式是严格区分大小写的,所以“Hi”和“Hilton”中的“Hi”被忽略了。
如果正则表达式是“\bhi\b”,那么它就可以匹配出文本中“hi”这个单词,而不把包含它的单词也算在内。在前面文本里,“\bhi\b”匹配不到任何结果。
如果正则表达式是“\bhi”或“hi\b”,它就可以分别匹配出文本中单词的开头或结尾是“hi”的字符。在前面文本里,“\bhi”可以匹配到1个“hi”,出自“history”。
如果正则表达式是 “[hi]”,它就不是匹配“hi”了,而是匹配“h”或者“i”。
在前面例子中,如果把正则表达式改为“[Hh]i”,就可以既匹配“Hi”,又匹配“hi”了。