正則表達式(附示例)- 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: \\\\ \\. *";

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

“如果您決定深入研究,這裡有幾個很好的鏈接:”

維基百科上的課程