
“現在我要告訴你正則表達式。這個話題既複雜又簡單。要徹底理解正則表達式,你可能需要閱讀兩三本厚書,但我可以教你如何使用它們現在。”
“正如有經驗的程序員喜歡開玩笑的那樣,如果你遇到問題並認為你會用正則表達式解決它,那麼現在你有兩個問題。”
“唔。”
“我希望我沒有嚇到你太多,我的朋友。不是嗎?”
“好,好。那麼,我們的新課題就是正則表達式了。”
“如果我們過度簡化它們,正則表達式就是字符串的模式。”
“您可以檢查字符串是否與給定模式匹配。您還可以使用定界符或模式將字符串拆分成多個部分。”
“但讓我們從簡單的事情開始:什麼是模式? ”
“在 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: \\\\ \\. *"; |
“哇!哇哦。現在我知道了。”
“如果您決定深入研究,這裡有幾個很好的鏈接:”
GO TO FULL VERSION