Looly +

正则表达式简明参考

前言

我想在网上最出名的正则相关的一篇文章就是《正则表达式30分钟入门教程》了,说实话这篇文章确实是我的正则入门,但是随着使用熟练,冗长的文章已经不能满足我了,在此做个归纳总结,用于快速查阅。

以下语法在Java中有效,大部分应该是通用的。

元字符

元字符,又叫字符集,就是用一些特殊符号表示特定种类的字符或位置。

匹配字符

匹配位置

重复

字符转义

如果想匹配元字符本身或者正则中的一些特殊字符,使用\转义。例如匹配*这个字符则使用\*,匹配\这个字符,使用\\

需要转义的字符:$, (, ), *, +, ., [, ], ?, \, ^, {, }, |

字符类

当需要匹配明确的字符或字符集合时候,就用到字符类。

特殊字符

陈列

范围

反义

表示不属于元字符或者字符类的字符

反义元字符

反义字符类

分枝条件

又叫逻辑运算符,在此XY表示两个表达式

分组

在这里我把表达式统一以\w为例:

后向引用

后面的表达式可以引用前面的某个分组,用\1表示,就好像分组1的值赋值给了\1这个变量,这个变量可以在后面任意位置引用。

匹配重复两个的英文,例如匹配Hello Hellolei123 lei123

  1. (\w+)\s+\1
  2. (?<Word>\w+)\s+\k<Word>

零宽断言(正向和负向)

零宽断言表示匹配字符的时候再添加一些定位条件,使匹配更精准。

贪婪与懒惰

贪婪:匹配尽可能长的字符串

懒惰:匹配尽可能短的字符串

懒惰模式的启用只需在重复元字符之后加?既可。

处理选项

在表达式里插记号的方式来启用绝大多数的模式,在正则的哪里插入,就从哪里启用。

  1. (?i):忽略大小写(CASE_INSENSITIVE)
  2. (?x):忽略空格字符(COMMENTS)
  3. (?s).匹配任意字符,包括换行符(DOTALL)
  4. (?m):多行模式(MULTILINE)
  5. (?u):对Unicode符大小写不敏感(UNICODE_CASE),必须启用CASE_INSENSITIVE
  6. (?d):只有'\n'才被认作一行的中止(UNIX_LINES)

平衡组/递归匹配

平衡组用于匹配嵌套层次结构,常用于匹配HTML标签(当HTML内容不规范,起始标签和结束标签数量不同时,匹配出正确配对的标签),在此把表达式统一以\w为例。

注释

注释语法:(?#comment),这个语法的内容会被正则忽略,用于注释含义。可以放在正则表达式的任意位置。


参考:

正则表达式30分钟入门教程

正则表达式

Blog

Opinion

Project