正则表达式讲解
正则表达式,又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为“元字符”),是计算机科学的一个概念。
正则化可以理解为一种什么法正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。它通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开来的,后来在广泛运用于Scala、PHP、C#、Java、C++、Objective-c、Perl、Swift、VBScript、Javascript、Ruby以及Python等等。
正则表达式由普通字符以及特殊字符组成。例如,“^a”匹配以字母“a”开头的字符串,“a”匹配以字母“a”结尾的字符串,“a”则只匹配整个由字母“a”组成的字符串。
正则表达式中的特殊字符包括:
^ 匹配字符串的开头
$ 匹配字符串的结尾
. 匹配任意字符,除了换行符
** 转义特殊字符
[...] 定义字符集
[^...] 定义反向字符集(不在该字符集内的字符)
[a-z] 定义范围字符集
[0-9] 定义范围字符集,相当于\d
\d 匹配任意十进制数字,相当于[0-9]
\D 匹配任意非数字字符,相当于[^0-9]
\s 匹配任意空白字符,相当于[\f\n\r\t\v]
\S 匹配任意非空白字符,相当于[^f\n\r\t\v]
\w 匹配任意字母数字字符,相当于[a-zA-Z0-9_]
\W 匹配任意非字母数字字符,相当于[^a-zA-Z0-9_]
***** 匹配前面的子表达式零次或多次
+ 匹配前面的子表达式一次或多次
匹配前面的子表达式零次或一次
{n} 匹配前面的子表达式n次
{n,} 匹配前面的子表达式n次或更多次
{n,m} 匹配前面的子表达式至少n次,但不超过m次
此外,还有一些特殊的量词,可以用来表示重复次数,例如:
{n,m} 表示匹配前面的字符至少n次,最多m次。例如,“o{2,4}”将匹配“ojo”、“ojoan”、“ogjjo”等。
{n,} 表示匹配前面的字符至少n次。例如,“o{2,}”将只匹配“oooooooooooooo”这样的连续o字符串,不会匹配“oj”。
{0,m} 表示可以重复前面的字符0次或最多m次。例如,“o{0,1}”将匹配“o”、“oj”、“ogjjo”等。
除了这些特殊字符和量词之外,正则表达式还支持一些修饰符,用来改变匹配的行为,例如:
i 忽略大小写
g 全局搜索
m 多行搜索
此外,正则表达式还有一些特殊的语法,可以用来匹配特定的字符串模式。例如:
∙() 将正则表达式分成多个部分,分别进行匹配。例如,“(abc)”将匹配“abc”这个子串,并且可以将匹配到的结果保存在一个变量中。
∙| 表示或者,例如,“a|b”将匹配“a”或“b”。
∙[] 表示字符集,例如,“[a-z]”将匹配任何一个字母“a”到“z”之间的字符。
∙[^] 表示反向字符集,例如,“[^a-z]”将匹配任何一个非字母“a”到“z”之间的字符。
∙\b 表示单词边界,例如,“\bfoo\b”将匹配“foo”,但不会匹配“foobar”或“food”。
∙\B 表示非单词边界,例如,“\Bfoo\B”将匹配“foobar”和“food”,但不会匹配“foo”。
∙^ 和 **∗∗分别表示行首和行尾,例如,“foo”将只匹配整个由“foo”组成的字符串。
这些语法可以组合使用,以实现更复杂的匹配规则。正则表达式在文本处理、网页爬取等领域都有广泛的应用。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论