JAVA 正则表达式

2021 年 11 月 5 日 星期五(已编辑)
1
这篇文章上次修改于 2021 年 11 月 5 日 星期五,可能部分内容已经不适用,如有疑问可询问作者。

JAVA 正则表达式

JAVA 正则表达式

正则表达式用作字符串的搜索模式。使用正则表达式,我们也可以找到单个匹配项或多个匹配项。我们可以在字符串中查找任何最大匹配项,例如简单的字符、固定字符串或任何复杂的字符模式,如电子邮件、SSN 或域名。

正则表达式

正则表达式是强大、灵活和高效的文本处理的关键。它允许您描述和解析文本。正则表达式可以添加、删除、隔离,通常折叠、主轴和残害各种文本和数据。

元字符和文字

全正则表达式由两种类型的字符组成。

  • 特殊字符(如文件名类比中的 *)称为元字符。
  • 其余称为文本字符或普通文本字符。

正则表达式从其元字符提供的高级表达能力中非常有用。我们可以把字面文本视为单词,将元字符视为语法。这些单词根据一套规则与语法相结合,以创建一个传达想法的表达式。

正则表达式元字符

让我们探索常用的元字符,以更好地理解它们。

开始和结束

开头和结尾用 ^$ 符号表示。插入符号和美元很特别,因为它们与行中的位置匹配,而不是任何实际文本字符本身。

例如,正则表达式 cat 在字符串的任何地方找到 cat,但只有当 cat 位于行的开头时,^cat 才会匹配,例如类别目录等单词。

同样,只有当 cat 在行末尾时,cat 才会匹配,例如像 cat 这样的单词。

字符类

正则表达式构造 ··· 通常称为字符类,允许我们在比赛的那个时候列出我们想要允许的字符。字符类在创建拼写检查器方面非常有用。

例如,e 只匹配 ea 只匹配 a,但正则表达式 ea 均匹配。例如,sep[ea]r[ea]te 将匹配所有 seperateseparateseparete

另一个例子可以是允许单词的第一个字母大写,例如 [Ss]mith 会允许 smithSmith 这两个词。

同样,<[hH][123456]> 将匹配所有标题标签,即 H1、H2、H3、H4、H5 和 H6。

字符范围

破折号 " - " 表示一系列字符。<[hH][1-6]> 类似于 <[hH][123456]>。其他有用的字符范围是 [0-9] 和 [a-z],它们匹配数字和英语小写字母。

我们可以在单个构造中指定多个范围,例如 [0123456789abcdefABCDEF] 可以写成 [0-9a-fA-F]。请注意,给出范围的顺序无关紧要。

请注意,破折号仅在字符类中是一个元字符,否则它与普通破折号字符匹配。此外,如果它是范围中列出的第一个字符,它可能无法指示范围,因此在这种情况下,它不会是元字符。

被否定的字符类

如果我们在字符类中使用否定符号 ( ^ ) 则该类匹配未列出的任何字符。例如 [^1-6] 匹配非 1 到 6 的字符。

将任何字符与点匹配

元字符 . 是匹配任何字符的字符类的缩写。请注意,当点在字符类中使用时,它们不是元字符。在字符类中,它只是一个简单的字符。

例如,06.24.2019 将与 06/24/2019 或 06-24-2019 或 201906.24.2019 相匹配。但是 06[.]24[.]2019 仅匹配 06.24.2019。

匹配交替 – 几个子表达式中的任何一个

管道符号 | 允许您将多个表达式组合成一个与任何单个表达式匹配的表达式。

例如,AlexBrian是单独的表达式,但 Alex|Brian 是两者中任何一个匹配的表达式。

与点类似,管道在字符类中使用时不是元字符。在字符类中,它只是一个简单的字符。

例如,为了匹配 First1st 这两个词,我们可以写正则表达式——(First|1st)或速记 (Fir|1)st

正则表达式语法

预定义字符类

.任何字符(与行结束符可能匹配可能不匹配)
\d数字[0-9]
\D非数字[^0-9]
\s空白字符[\t\n\f\r]
\w单词字符[a-zA-Z_0-9]
\W非单词字符[^\w]

Greedy 数量词

X?X,一次或一次没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好n次
X{n,}X,至少n次
X{n,m}X,至少n次,但是不超过m次

范围词

[abc]a、b或c(简单类)
[^abc]任何字符,除了a、b或c(否定)
[a-zA-Z]a到z 或 A-Z,两头字母包括在内(范围)
[a-d[m-p]] | a到d 或 m到p :a-dm-p
[a-z&&[def]]d、e或f(交集)

边界匹配器

^行的开头
$行的结尾
\b单词的边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾

实例

电子邮件地址的正则表达式

^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$

密码验证的正则表达式

((?=.*[a-z])(?=.*d)(?=。*[@#$%])(?=。*[A-Z])。{6,16})

商标符号的正则表达式

\u2122

任何货币符号的正则表达式

\\p{Sc}

“希腊扩展”或希腊字母中任何字符的正则表达式

\\p{InGreek}和\\p{InGreekExtended}

北美电话号码的正则表达式

^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$

国际电话号码的正则表达式

^\+(?:[0-9]?){6,14}[0-9]$

日期格式的正则表达式

^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}美元

社会保障号码(SSN)的正则表达式

^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$

国际标准书号(ISBN)的正则表达式

^(?:ISBN(?:-1[03])?:?)?(?=[0-9X]{10}$|(?=(?:[0-9]+[- ]){3})[- 0-9X]{13}$|97[89][0-9]{10}$|(?=(?:[0-9]+[-]){4})[- 0-9]{17}$)(?:97[89][- ]?)?[0-9]{1,5}[-]?[0-9]+[-]?[0-9]+[-]?[0-9X]$

使用社交账号登录

  • Loading...
  • Loading...
  • Loading...
  • Loading...
  • Loading...