正则表达式
1.正则表达式介绍
- 正则表达式对字符串操作的逻辑公式,用事先定义好的一些特定字符和特定字符的组合组成规则字符串用来表达对字符串的过滤逻辑。即过滤字符串。
特点
- 灵活性、逻辑性和功能性非常强;
- 可以迅速地用极简单的方式达到字符串的复杂控制。
- 不适合逻辑处理,适合匹配、替换等操作
- 不是一门语言,是一个有独特语法的工具
- 使用对象是文本,在各种文本编辑器中使用
- 应用:正则表达式主要应用对象是文本,因此它在各种文本编辑器,开发工具都有应用。如:EditPlus,IDEA
2.元字符类型
- 定界符和前导字符
/xx/ 其中位于“/”定界符之间的**”前导字符“**就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式字符放入“/”定界符之间即可
- 元字符:使用户更加灵活的定制模式内容,正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符
- 重要元字符
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字等价于’[A-Za-z0-9_]’,但实际却不仅仅包含这些数据,也包含希腊字母和俄文字母,所以根据具体匹配数据来做出相应的具体的规则,不要\w这种笼统的字符。另外\w能否匹配汉字需要根据操作系统和应用环境来决定。但匹配的是表示一个字符
\W 表示任何非单词字符[^A-Za-z0-9_]
\\w 表示匹配\w,没特殊意义,不使用在正则表达式里
\s 匹配任意空白字符(换行、空格、tab制表符)
\S 表示任何非空白字符
\d 匹配数字
\D 匹配非数字
\‘\ 表示反斜杠(\)字符,\是为了转义
\是为了转义,不只是正则表达式里的转义,也代表一般字符串的转义 如:C# 中换行 "\n", 正则表达式中"\w"要转义为"\\w"或者使用@"\w"
\n 表示换行
\t 表示制表符
[^abc] 精确匹配,注意[]中括号中的不同于下面介绍的定位符,规定目标对象中不能存在模式中所规定的字符串,所以表示除a、b、c之外的任意字符
[abc] 精确匹配,表示由a、b、c组成的字符
[A-Za-z0-9] 表示匹配数字字母组成的字符,正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符,
/([A-Z】[a-z】[0-9])+/ : 正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。所以,上述正则表达式匹配的时”A1z“三种字符类型的字符串(大写、小写字母、数字)
/ab\*/ 正则里面要使用元字符作为普通字符需要转义字符\ 所以此处的\*非正则里面的元字符,是用\转义后的普通字符,不匹配abbb而是匹配ab*
位于元字符前面的字符,定义在目标对象中的出现模式
- 举例:
'1 2 3'.split(' ') ==>['1', '2', '', '', '3']分割时将空格也包含进去了
'\s+'可以将 '1 2 3' 分割为['1', '2', '3']无论多少空格
'[\s\,\;]+' 可以将’1, 2,; 3‘分割为['1', '2', '3']无论多少空格、逗号、都特殊服务号
[\d00]可以匹配百位数据
'/\w\w\d/' 可以匹配'ab6';
/\d{3}\s+\d{3,8}/ 匹配以任意个空格隔开的带区号的电话号码
/\d{3}\-\d{3,8}/ 匹配'010-12345'这样的号码,'-'是特殊字符,要用'\'转义
[a-zA-Z\_][0-9a-zA-Z\_]*可以匹配由字母或下划线开头,后接任意个由一个数字、字母或者下划线组成的字符串
- 定位符
\b 匹配对象在目标字符串的开始或结束的两个边界之一
\B 匹配对象在目标字符串的开始或结束的两个边界之内,匹配对象不作为目标字符串的开头和结尾
^ 匹配对象在目标字符串的开始,注意[^]时否定符,在[]外部或没有[]才为定位符
$ 匹配对象在目标字符串的末尾
- 举例:
/\b12/ 因为上述正则表达式模式以“\b”定位符开头,所以可以与目标对象中以 “1234”, 或 “12”开头的字符串相匹配。/12\b/ 因为上述正则表达式模式以“\b”定位符结尾,所以可以与目标对象中以 “312”, “12”结尾的字符串相匹配。
/^ab$/ 为整行匹配,只能匹配ab
- 常用的元字符包括: “+”, “*”,以及 “?”。
“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次,至少出现一次。
“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次。
“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。
- 举例:
/ab+/ 因为上述正则表达式中包含“+”元字符,表示可以与目标对象中的 “abb”, “abbc”, 或者 “ab等在字母a后面连续出现一个或多个字母b的字符串相匹配。
[]后有了+,[]内的字符可以匹配一次或多次。于是[]内的字符可以以任意次序出现任意多次,直到遇到第一个非[]内的字符。如[12]+ 既可以匹配1122又可以匹配2211等,不是一定要1…2…的次序。
/ab’**/ 因为上述正则表达式中包含“*”元字符,表示可以与目标对象中的 “ab”, “a”, 或者 “abb”等在字母a后面连续出现零个或多个字母b的字符串相匹配。
/abc?/ 因为上述正则表达式中包含“?”元字符,表示可以与目标对象中的 “abcdf”, 或者“abdef”,等在字母b后面连续出现零个或一个字母c的字符串相匹配。
- 限定符:指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
{n} :n 是一个非负整数。匹配确定的 n 次。例如,‘1{2}’ 不能匹配 “123” 中的 ‘1’,但是能匹配 “221133” 中的两个 1。
{n,} :n 是一个非负整数。至少匹配 n 次例如,‘1{2}’ 不能匹配 “123” 中的 ‘1’,但是能匹配 “22111133” 中的4个 1。 ‘1{1,}’ 等价于 ‘1+’。‘1{0,}’ 则等价于 ‘1*’。
{n,m} :精确指定模式在匹配对象中出现的次数. m 和 n 均为非负整数,其中n <= m。匹配区间在n-m之间。例如,“a{1,4}” 将匹配 “baaaadfd” 中的4个 a。‘a{0,1}’ 等价于 ‘a?’。请注意在逗号和两个数之间不能有空格。
- 逻辑运算符”或“
| 多个不同的模式中任选一个进行匹配的话,可以使用管道符 “|”。如:/ab|AD|78/ 可以匹配”abc“、”ADC“、”a78“等字符,/[a|b]456/可以匹配a456
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123803.html