RegExp正则表达式(一)–正则表达式的初级应用

正则表达式是用来匹配字符串的。它根据一套自定义的匹配规则来得到预期字符串。

比如,有一段邮箱的字符串:“740974794@qq.com”,我想从这一段字符串中匹配出“@”后面的字符串,就可以用正则表达式自定义规则来匹配。

根据自定义的匹配规则,我们可以从字符串中得到0个或至少一个匹配结果,对于匹配结果我们就可以根据程序的需要进行后续的操作。


要点
学习正则表达式要从以下这两个要点进行下手:

  1. 匹配规则
  2. 表达式的字符含义

匹配规则

正则表达式在要匹配的字符串中从左至右逐字搜索,逐字匹配。只有字符串中某个片段与匹配规则完全吻合,才算匹配成功。字符串中可以有一个或多个片段匹配成功,也可以没有匹配,即匹配失败。

举个栗子

匹配规则字符串匹配结果
xiaoyang“xiaoyangblogt.duapp.com”“xiaoyang”(1处匹配)
a“xiaoyangblogt.duapp.com”“a”(3处匹配)
xiaoblog“xiaoyangblogt.duapp.com”匹配失败

表达式的字符含义

正则表达式的匹配规则是由字符组成的,其字符大致可以分为两类:一类是普通字符,另一类是特殊字符。无论哪种字符,它们的出现都是为了定义匹配规则,从而得到预期的匹配结果。下面来分别展示表达式中的这两种字符。

普通字符
像字母、数字、汉字、下划线等在正则中没有特殊意义的字符都是普通字符。比如上例中的”xiaoyang”,”a”,”xiaoblog”这些表达式中的字符都是普通字符。可能你会对普通字符的定义还是摸不着头脑,别着急,客官你继续往下看,对比特殊字符,你可能就会知道正则的普通字符有哪些了(因为除了特殊字符以外的字符都是普通字符 ~O(∩_∩)O~)

特殊字符
正则表达式的特殊字符按照作用我把它分为

  • 匹配特定字符集
  • 匹配自定义字符集
  • 通配符
  • 位置符
  • 转义字符
  • () 与 |

特定字符集

特殊字符字符含义
\s匹配一个空白字符,包括空格,制表符,换页符
\S匹配一个非空白字符,和\s正好相反
\d匹配一个数字字符(0~9)
\D匹配一个非数字字符,和\d正好相反
\w匹配一个字母或数字或下划线字符
\W匹配一个非字母、数字、下划线字符,和\w正好相反
.(英文点)小数点,匹配除了换行符以外的任意一个字符

举个栗子

匹配规则字符串匹配结果
\d\d“abc12““12”(1处匹配)
a.\d“abc12″“bc1″(1处匹配)
\D\d“abc12″“c1″(1处匹配)
\S\s\d“abc 12″“c 1″(1处匹配)

自定义字符集
使用方括号”[]”特殊字符,能够匹配其中包含的任意一个字符;使用”[^]”字符,则与”[]”字符正好相反,其能够匹配其中所有字符之外的一个字符

举个栗子
下面举几个”[]”字符和”[^]”字符的例子:

表达式表达式含义
[aA@]匹配”a”或”A”或”@”其中的一个字符
[^aA@]匹配除”a”,”A”,”@”之外的一个字符
[f-k]匹配英文字母”f”到”k”中的一个字符
[^f-k]匹配非除英文字母”f”到”k”之外的一个字符
[f-k0-5]匹配英文字母”f”到”k”或数字”0″到”5″中的一个字符
[^f-k0-5]匹配除英文字母”f”到”k”和数字”0″到”5″之外的一个字符
[f-k178]匹配”f”到”k”或”1″或”7″或”8″中的一个字符

结论
由上可以看出:”[]”(或”[^]”)字符对于其中枚举的字符对应到规则上是“或”的关系,即一个”[]”(或”[^]”)字符只能匹配字符串中的一个字符。如[aA@]对应到规则上是”a”或”A”或”@”。另外,

  • 如果想枚举不连续的字符(一般是根据UTF-8字符集上的顺序),有多少写多少就可以,如[aA@];
  • 如果想枚举连续的字符,用”-“(英文减号)链接即可,如[a-z]。
  • 也可以这两方式混合写,如[f-k178]表示匹配字符”f”到”k”或”1″或”7″或”8″中的1个字符,[f-k0-5]表示匹配字符”f”到”k”或”0″到”5″中的1个字符。

通配符
正则表达式中的通配符是用来修饰匹配次数的。下表中列出了通配符和其作用

通配符作用
{n}作用对象重复n次
{m,n}作用对象重复至少m次,至多n次
{m,}作用对象重复至少m次
?作用对象重复0次或1次,相当于{0,1}
+作用对象重复至少1次,相当于{1,}
*作用对象重复0次或多次,相当于{0,}

通配符的作用对象是指其在正则表达式中修饰的片段。

  • 如果正则表达式的单个字符(普通字符和特殊字符都可以)紧邻的下一个字符是通配符,那么该通配符的作用对象就是该单个字符。
  • 如果正则表达式中的小括号”()”后面紧邻的下一个字符是通配符,那么该通配符的作用对象是该括号中的表达式。括号中的表达式可以是一个或多个正则字符。

关于小括号的作用,留到后面讲解。

举个栗子
下面表格是关于通配符的例子:

匹配规则字符串匹配结果
\d+“It’s cost $12.5″“12”(1处匹配)
(\d123)+“123212341233333″“21234123”(1处匹配)
\d{2,}“123212hy341233333““123212” ,“341233333”(2处匹配)
\d{2,5}“123212hy341233333″“12321” ,“34123”(2处匹配)
[a-zA-Z]{2}“123212hy341233333″“hy”(1处匹配)

位置符

位置符作用
^定位字符串开始的地方,该符号不匹配字符
$定位字符串结束的地方,该符号不匹配字符
\b定位字符串边界的地方,该符号不匹配字符
\B定位字符串非边界的地方,该符号不匹配字符,和\b正好相反

^ ,$,\b,\B是有特殊意义的正则符号,它们本身不匹配任何字符。
比如,

^sa,表示匹配以”sa”开头的字符串;

sa$,表示以”sa”结尾的字符串。

\b:相邻的\w和\W就是一个\b。

举个栗子

匹配规则字符串匹配结果
^aa“ccbbaacc”匹配失败
^aa“aaccbbcc”“aa”(1处匹配)
aa$“aaccbbcc”匹配失败
aa$“ccbbccaa““aa”(1处匹配)
.\b.“123@qq.com”“3@” ,“q.”(2处匹配)
c\ba” cabc”匹配失败
a\b“aaaa*”“a”(1处匹配)
\ba“*aaaabc”“a”(1处匹配)

转义字符
在正则表达式中,如果想匹配 . (点)字符本身怎么办呢?那就要用到转义字符了。
转义字符格式:

\ + 需要转义的字符。

转义字符用于匹配在正则表达式中有特殊含义的字符。

正则表达式中需要转义的字符有:

^
$
.
(
)
[
]
{
}
?
+
*
|
\
/

如,
正则表达式\(a+\)
匹配字符串”(aa)(aabb)”
结果是”(aa)”
另外,
如果匹配

换行符(\n),
回车符(\r),
制表符(\t)

等非打印字符时,也要用转义字符匹配。

()与|符号
在正则表达式中,小括号()用于捆绑、打包字符片段,使括号内的字符片段作为一个整体,然后可以对其进行统一的操作
那么,括号的作用有二:

  • 作为通配符的一个整体修饰对象
  • 括号内的字符片段匹配成功时,将匹配成功的字符片段作为副本保存起来,以供后续使用。

对于上述第二个作用,如果要在当前表达式中引用括号中保存起来的片段,要用\ + 数字引用。

比如,

\1表示由左到右的第一个括号中存储的字符片段,
\2表示第二个括号中存储的字符片段,
……
以此类推。

注意:
引用的是已经匹配成功的片段副本,而不是括号中的正则表达式的模式。如果括号嵌套也没关系,因为括号引用是以左括号出现的顺序排序的。

关于()的存储功能会在下一篇正则高级应用中详细讲解

举个栗子

匹配规则字符串匹配结果
(abc)+a“abcabca”“abca”(1处匹配)
(abc)wz\1“abcwzabcccc”“abcwzabc”(1处匹配)
(\d)aa\1“1aa1aa2″“1aa1″(1处匹配)
(\d(\w)a)\1\2“3wa3wawa3wa3raa”“3wa3waw”(1处匹配)

竖线 |
竖线”|”表示“或”,如a|b,表示匹配字符”a”或”b”中的一个字符

举个栗子

匹配规则字符串匹配结果
(a|b)ootaootooboot“aoot” ,“boot”(2处匹配)
(a|b)ootaboot“boot”(1处匹配)
a|Text“aextText““a” ,“Text”(2处匹配)
(ab|ef)+“ababef““ababef”(1处匹配)

上例中a|Text,表示的是匹配字符”a”或”Text”,而不是”aext”或”Text.我们很容易误认为是第二种结果,如果要想得到第二种结果,规则应该这样写:(a|T)ext

以上所有例子中的匹配附加条件都是:全局匹配,区分大小写,单行匹配

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值