对计算机的学习中总会遇到一堆看不懂什么意思但是觉得很厉害的词,总会有人望而却步,所以被称为劝退名词……
虽然确实存在这种现象,但往往在高大上的名词背后其实学起来是很简单的。正则表达式就是其中之一。
下面从三个方面讲解正则表达式:
- 正则表达式是什么
- 为什么用正则表达式
- 怎么使用正则表达式
正则表达式是什么
不讲究严格的定义,正则表达式是一种能够代表一类字符串 的字符串。
……
虽然我还想在这一段加点东西,但是,没了。
对,正则表达式的概念就是这么简单明了。
“a”是不是一个正则表达式?是啊,它代表了里面有a的一类字符串。
就那么简单。
如果你之前看过别人写的正则表达式,你可能会说:“不对啊,我看别人写的都是各种符号各种看不懂一长串啊,还配合着各种骚操作!”
咳咳,那些是我们在第三段讲的东西,但是正则表达式的基本概念,就那么简单。
为什么要用正则表达式
正则表达式是代表一类字符串的字符串。所以,用正则表达式就可以匹配、查找、替换一类字符串,而不用大费周折写一长串的判定条件。
对于一般简单、固定类型的字符串,用普通的charAt,indexOf等操作可以完成,正则表达式同样可以完成。
对于复杂的,类似一个html文档那么长的字符串,普通的操作难以完成,正则表达式可以轻易完成,还可以实现遍历操作(例如处理html文档,找出每个<p>和</p> 之间的内容)。
而且正则表达式特别适合处理“大概有多少个”这种问题,比如,一个字符串可以包含三到五个连续数字,用正则表达式这么写”\d{3,5}”就可以匹配,而用普通字符串处理操作呢?
更棒的是,虽然每种语言实现起来略有差别,但是正则表达式的语法几乎是完全相同的,在c++里可以这么用,java里也可以,甚至sql里也可以。
怎么用正则表达式
终于进入正题了。上面都是一些基本概念,下面就来进入实战吧
正则表达式中分为 字符 和 操作符 ,就像算术里数字和运算符的关系。
字符就是诸如abc,0-9这种在字符串中出现的,传统意义上的字符。
而操作符是正则表达式的核心,有的代表这字符出现的频率,有的代表着字符出现的位置,有的代表字符的逻辑关系。
下面是操作符的解释和例子
对于()和[]的区别:
()代表着分组的概念,因为操作符只匹配前面的一个字符,所以要对“一组字符”使用操作符,就要分组,也就是对操作符来说,这一组算是一个字符。
例如,abc+匹配的是abc,abcc,abccccccc等,加了括号之后,(abc)+匹配abc,abcabc,abcabcabc等。
而[]代表取值范围,是一种或的关系。代表着这一字符的取值可以是[]之中的任意一个字符(当然也可以用括号分组)。补充2:\d代表数字,\D代表非数字,\w代表字母,\W代表非字母。另外,\s可以匹配制表符,如空格和缩进,\n可以匹配换行。
补充3:贪婪匹配和最小匹配
想像一下,我们用ab.+(也就是ab后跟若干个任意字符)去匹配abcdefg,那我们得到的会是什么?abc还是abcdefg?
为了避免歧义,正则表达式有两个原则:贪婪匹配和最小匹配。
贪婪匹配是指,只要后面的还能符合,就全都被匹配,也就是匹配abcdefg
最小匹配正好相反,只会匹配abc,哪怕后面再长。
默认,采取的是贪婪匹配。那我们怎么使用最小匹配呢?
答案是:在操作符之后加问号即可。例如ab.+是贪婪匹配,ab.+?是最小匹配。
这里就不具体到具体语言了,有兴趣的同学可以百度其他博客,有了这个基础,看什么都会快一点。