正则表达式(regular expression)
一、介绍
匹配文本内容的一种表达式。
-
其描述了一个规则,通过这个规则可以匹配一类字符串
-
简单的处理文本的语言
-
很多的编程语言都可以使用正则表达式
二、字符匹配
简单字符
写出一个普通字符串就会匹配一个字符串

简单的转义字符
-
\n:换行 -
\t:制表符 -
\\:\本身 -
\@ \$… 字符本身
标准字符集合 \type
-
\d:任意数字,0~9中的一个 -
\D:除了上面的都匹配 -
\w:任意的字母或数字或下划线。即A~Z a~z 0~9 _中的一个 -
\W:除了上面的都匹配 -
\s:空格、制表、换行等空白字符中的一个 -
\S:除了上面的都匹配 -
.:可以匹配任一个字符(除了换行符)
如果要匹配包括\n在内的所有字符,一般用[\s\S]
自定义字符集合[ ]
[ ]:匹配[ ]中的任一个字符,如[abc]匹配a或b或c
例子:
[^abc]:匹配a或b或c之外的
[f-k]、[2-8]:匹配f~k之间的包括边界 (-减号)
[^a-f2-3]:匹配a~f 和 2~3之外的
注意:
-
如果特殊符号包含在[ ]中则会失去特殊意义,除了
^-(减号) -
[ ]中有标准字符集合,除了.匹配任一个字符之外,会匹配对应的的集合如
[\d.\-+]匹配数字 .号 -号 +号
三、量词
修饰匹配次数的特殊字符
-
{n}:匹配n次前一个表达式例子:
\d{6}匹配6次\d,{}仅指明前一个表达式\d。等价于\d\d\d\d\d\d(\d\d){6}:12个\d -
{n,m}:匹配最少n次,最多m次特性:默认贪心(匹配越多越好)
例子:\d{2,5}
文本:1234567
会匹配12345 而不是12
非贪婪模式(
{}?:会将匹配改成匹配越少越好。) -
{n,}:至少匹配n次 -
?:匹配表达式0次或1次 ,相当于{0,1}例子:
a\d?b:匹配有ab并且其中有一个数字或没有数字的字符串 -
+:匹配表达式至少1次 ,相当于{1,}例子:匹配所有空白符

*:匹配表达式不出现或任意次数的 ,相当于{0,}
四、描述字符边界(零宽度,匹配不到字符)
表示匹配的是一个位置而不是字符,其不占据位置(如:a\bb:\b在a与b之间的位置)
符号:
^:字符串开始的地方
$:字符串结束的地方
\b:匹配一个单词边界,前面的字符和后面的字符不全是\w
ignorecase:忽略大小写模式
singleline:单行模式 —— 把整个文本看作是一个字符串
multiline:多行模式 —— 每一行都是一个字符串
在多行模式中若想匹配第一行\A,最后一行\Z
五、正则语法
- 选择符与分组
-
|:或 ,左右两边表达式为或的关系,匹配左边或者右边 -
():捕获组 ,匹配到的会被保存到内存中,每一个括号对应一个标号1,2,3… -
(?:Expression):不需要匹配到的内容,匹配到的内容不保存,大文本是需要考虑
-
反向引用
(\nnn)\后面的nnn依次对应前期的()已匹配出的内容 -
预搜索(零宽断言)
-
是对位置的匹配,其本身是不计入匹配结果的
-
(?= exp ):断言自身的后面应该匹配exp表达式(?! exp ):断言自身的后面不能匹配exp表达式(?<= exp ):位置前面应该怎么样(?<! exp ):位置前面不应该怎么样
六、练习
匹配中文字符:[\u4e00-\u9fa5]
匹配空白行:\n\s*\r
匹配HTML标记:<(\S*?)[^>]*>.*?<^1>|<.?/>
匹配首位空白字符:^\s*|\s*$
匹配Email地址:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
匹配网站URL:[a-zA-Z]+://[^\s]*
七、开发环境或文本编译器中使用正则
在Java中使用
正则中的\在Java中变成\\
-
相关类在
java.util.regex包下Pattern类:
正则表达式的编译形式
Pattern p = Pattern.compile(r,int);//创建正则表达式,并启用相应模式Matchar类:
通过解释Pattern对character sequence执行匹配操作的引擎
Matter m = p.matcher(str);//匹配str字符
正则表达式是一种强大的文本处理工具,用于匹配字符串。它包含简单字符、转义字符、标准字符集合如d、w、s,以及量词如{n,m}
402

被折叠的 条评论
为什么被折叠?



