正则表达式以及在Java中的使用

正则表达式(regular expression)

一、介绍

匹配文本内容的一种表达式。

  1. 其描述了一个规则,通过这个规则可以匹配一类字符串

  2. 简单的处理文本的语言

  3. 很多的编程语言都可以使用正则表达式

二、字符匹配

简单字符

​ 写出一个普通字符串就会匹配一个字符串
正则表达式以及在Java中的使用_第1张图片

简单的转义字符

  • \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之外的

注意:

  1. 如果特殊符号包含在[ ]中则会失去特殊意义,除了^ -(减号)

  2. [ ]中有标准字符集合,除了.匹配任一个字符之外,会匹配对应的的集合

    [\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,}

    例子:匹配所有空白符
    正则表达式以及在Java中的使用_第2张图片

  • *:匹配表达式不出现或任意次数的 ,相当于{0,}

四、描述字符边界(零宽度,匹配不到字符)

表示匹配的是一个位置而不是字符,其不占据位置(如:a\bb:\b在a与b之间的位置)

符号:

^:字符串开始的地方

$:字符串结束的地方

\b:匹配一个单词边界,前面的字符和后面的字符不全是\w

ignorecase:忽略大小写模式

singleline:单行模式 —— 把整个文本看作是一个字符串

multiline:多行模式 —— 每一行都是一个字符串

在多行模式中若想匹配第一行\A,最后一行\Z

五、正则语法

  • 选择符与分组
  1. |:或 ,左右两边表达式为或的关系,匹配左边或者右边

  2. ():捕获组 ,匹配到的会被保存到内存中,每一个括号对应一个标号1,2,3…

  3. (?:Expression):不需要匹配到的内容,匹配到的内容不保存,大文本是需要考虑

  • 反向引用(\nnn)

    \后面的nnn 依次对应前期的()已匹配出的内容

  • 预搜索(零宽断言)

  1. 是对位置的匹配,其本身是不计入匹配结果的

  2. (?= 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中变成\\

  1. 相关类在java.util.regex包下

    Pattern类:

    正则表达式的编译形式

    Pattern p = Pattern.compile(r,int);//创建正则表达式,并启用相应模式

    Matchar类:

    通过解释Pattern对character sequence执行匹配操作的引擎

    Matter m = p.matcher(str);//匹配str字符

你可能感兴趣的:(工具,正则表达式,java,字符串)