正则表达式(附示例)- 1

“现在我要告诉你正则表达式。这个话题既复杂又简单。要彻底理解正则表达式,你可能需要阅读两三本厚书,但我可以教你如何使用它们现在。”

“正如有经验的程序员喜欢开玩笑的那样,如果你遇到问题并认为你会用正则表达式解决它,那么现在你有两个问题。”

“唔。”

“我希望我没有吓到你太多,我的朋友。不是吗?”

“好,好。那么,我们的新课题就是正则表达式了。”

“如果我们过度简化它们,正则表达式就是字符串的模式。”

“您可以检查字符串是否与给定模式匹配。您还可以使用定界符或模式将字符串拆分成多个部分。”

“但让我们从简单的事情开始:什么是模式?

“在 SQL 中(但不是在 Java 中),您可以检查字符串是否与特定模式匹配。它看起来是这样的:”

name like 'Alex%'

这里的 name 是一个变量,like 是一个检查模式的命令,“Alex%”就是模式。

在这种情况下,% 表示任何字符串或子字符串。

图案 匹配模式的字符串
'亚历克斯%' 亚历克斯
亚历克斯安德亚历
克斯安德亚历
克斯安德拉
……
'%X%' Max x
Ma x im
Ale x andr
'%A' Olg
Helen
Ir a

“在 SQL 中,如果您需要指定只能有一个其他字符,那么您将使用下划线字符:“_”。”

图案 匹配模式的字符串
'亚历克斯%_' 亚历克斯
亚历克斯安德亚历
克斯安德亚历
克斯安德拉
……
'_X'
Bx
Cx
'___' 啊啊
啊啊
啊啊
……

“这就说得通了。”

“好吧,那么让我们继续学习正则表达式。”

“正则表达式通常不仅包括对字符数量的限制,还包括对字符数量的限制。”任何掩码通常由两部分(有时更多)组成:第一部分描述字符“首选项”,第二部分描述字符数量”

“这里有一些内容示例:”

图案 描述 例子
. 任何一个角色 1个
\d 任何数字 7
\D 任何非数字 C
\s 空格、换行符或制表符 ' '
\S 除空格、制表符和换行符之外的任何内容 F
[阿兹] 从 a 到 z 的任何字母 z
[0-9] 从 0 到 9 的任何数字。 8个
\w 任意字字符 C
\W 任何非单词字符 _

“我不会马上记住那些,但看起来并不难。”

“很好,下面是掩码中字符数的示例:

图案 描述 例子
A? 字符“A”出现一次或根本不出现 A
B+ 字符“B”出现一次或多次 BBBB
C* 字符“C”出现零次或多次 CCC 认证
D{n} 字符'D'出现n次 模式 D{4} 匹配 DDDD
E{n,} 字符“E”出现 n 次或更多次 模式 E{2,} 匹配 EEEEEEE
F{n,m} 字符“F”出现了 n 到 m 次 模式 E{2,4} 匹配 EEEE

“这一切看起来都很简单。”

“你很快就掌握了一切。现在让我们一起看看它看起来如何:”

图案 描述 例子
[广告]? 'a' 和 'd' 之间的字符出现一次或根本不出现 A B C D
[bd,z]+ 字符“b”、“c”、“d”或“z”出现一次或多次 b, bcdcdbdbdbdbzzzzbbzbzb, zbz
[1,7-9]* 数字 1、7、8 或 9 出现零次或多次 1, 7, 9, 9777, 111199
1{5} 数字1出现5次 11111
[1,2,a,b]{2} 符号 1、2、'a' 或 'b' 出现两次 11, 12, 1a, ab, 2b, bb, 22
[a,0]{2,3} 符号“a”或 0 出现 2 或 3 次 aa, a0,00,0a, aaa,000, a00,0a0, a0a

“还是很清楚。”

“真的吗?嗯。要么我解释得很好,要么你理解得太快了。好吧,不管怎样,这对我们都有好处。”

“这里有一些新的见解给你。”

“由于正则表达式通常用于查找子字符串,我们可以在我们的模式中再添加两个字符(^ 和 $)。”

"^ 表示子字符串必须包含字符串的开头。"

"$ 表示子字符串必须包括字符串的末尾。"

“这里有些例子:”

图案 与模式匹配的字符串和子字符串
一个{3} 啊啊 啊啊  _  _
一个{3}$ 啊啊啊啊 
^a{3} 啊啊 啊啊啊
^一个{3}$ 啊啊啊啊啊

“还有一点很重要。”

“在正则表达式中,以下字符具有特殊含义:[ ] \ / ^ $ . | ? * + ( ) { }。它们被称为控制字符。因此,您不能简单地在字符串中使用它们。”

“就像在 Java 代码中一样,它们必须被转义。”同样,在 Java 代码中,'\' 字符用于此目的。

“如果我们想描述一个由三个'?'组成的字符串 字符,我们不能写'?{3}',因为'?' 是一个控制字符。我们需要这样做:\?{3}。如果我们想使用'\'字符,那么我们需要写'\\'。”

“好的,我知道了。”

“现在还有另一个有趣的花絮。在带有 Java 代码的文件中,'\' 字符也必须在字符串中转义,因为它是一个控制字符。”

“当然。”

“所以,如果你试图在字符串中定义 Java 正则表达式,那么你需要对 '\' 字符进行两次转义。”

“这是一个例子:”

我想要一个匹配 'c:\anything' 的掩码
理论上,正则表达式应如下所示:
一个“c”字符、
冒号、
反斜杠、
句点和星号(表示任意数量的字符)。我添加了空格以提高可读性:
c : \ .*
但字符 '\' 和 '.' 需要进行转义,因此正则表达式将如下所示:
c :   \\ \. *
或者,不带空格
c: \\ \. *
"我们的正则表达式中应该有三个反斜杠。
这意味着在 Java 文件中正则表达式将如下所示:"
String regexp = "c: \\\\ \\. *";

“哇!哇哦。现在我知道了。”

“如果您决定深入研究,这里有几个很好的链接:”

维基百科上的课程