正則表達式:Java 中的 \z 與 \Z 錨點
一、簡介
正則表達式是在 Java 中匹配和操作文本的強大工具。它們允許我們指定匹配文本中某些字符、單詞或短語的模式。在 Java 中,通過java.util.regex
包支持正則表達式。
此外,\z 和 \Z 是兩個常見的正則表達式錨點,可以匹配字符串的結尾。
在本教程中,我們將探討這兩個錨點之間的區別、它們的工作原理以及何時使用它們。
2. 正則表達式錨點—— \z
與\Z
正則表達式錨點是一個字符或字符序列,可以指定文本中應該發生匹配的位置。
\z
和\Z
都是正則表達式錨點,可以精確匹配字符串的結尾。但是,當字符串以行終止符(例如換行符)結尾時,它們的行為會有所不同。
通常,當我們要確保正則表達式匹配字符串的絕對結尾時,使用\z
,無論它是否以行終止符結尾。這對於確保匹配模式後不再有文本很有用。
另一方面,當我們想要確保正則表達式匹配字符串的結尾或行的結尾(如果字符串以行終止符結尾)時,使用\Z
。當我們想要匹配多行字符串中每行末尾的模式時,這很有用。
3. 何時使用 \z 和 \Z 的例子
現在我們了解了 \z 和 \Z 之間的區別,讓我們探索可能使用每個錨點的真實場景。
3.1.使用\z
的例子
驗證信用卡號時,我們要確保卡號後沒有多餘的數字或字符。為此,我們可以使用 \z 正則表達式。它確保該模式僅匹配完整的信用卡號,而不匹配其後可能出現的任何其他文本。
@Test
public void givenCreditCardNumber_thenReturnIfMatched() {
String creditCardNumber = "1234567890123456";
String pattern = "\\d{16}\\z";
Assertions.assertTrue(creditCardNumber.matches(pattern));
}
此方法使用使用\z
的正則表達式模式匹配來驗證給定的信用卡號是否恰好包含 16 位數字。
另一方面,在解析日誌文件時,我們可能希望匹配每行末尾的模式。但是,我們不想包含後續行中的任何文本。在這種情況下,我們可以使用 \z 正則表達式來確保模式只匹配行尾的文本。即使該行以行終止符結尾,\z 也確保該模式僅匹配最後一行。
@Test
public void givenLogOutput_thenReturnIfMatched() {
String logLine = "2022-05-01 14:30:00,123 INFO Some log message";
String pattern = ".*message\\z";
Assertions.assertTrue(logLine.matches(pattern));
}
此方法需要定義一個日誌行.
然後它檢查它們是否以單詞“message”結尾,後跟字符串\z
的結尾。
3.2.使用\Z
的例子
解析電子郵件時,我們通常只想匹配郵件正文末尾的模式,而不包括電子郵件簽名中的任何文本。為此,我們可以在正則表達式中使用 \Z 符號,以確保該模式僅匹配消息正文末尾的文本。
@Test
public void givenEmailMessage_thenReturnIfMatched() {
String myMessage = "Hello HR, I hope i can write to Baeldung\n";
String pattern = ".*Baeldung\\s*\\Z";
Assertions.assertTrue(myMessage.matches(pattern));
}
此方法檢查字符串消息是否以模式“Baeldung”結尾,後跟可選的空白字符,然後是字符串\Z
的結尾。
同樣,在匹配文件擴展名時,我們可能希望確保正則表達式只匹配文件名末尾的擴展名。同樣,我們可以在正則表達式中使用 \Z 符號來確保它只匹配文件名末尾的擴展名。
@Test
public void givenFileExtension_thenReturnIfMatched() {
String fileName = "image.jpeg";
String pattern = ".*\\.jpeg\\Z";
Assertions.assertTrue(fileName.matches(pattern));
}
此代碼使用\Z
正則表達式測試文件名是否以特定文件擴展名結尾。方法givenFileExtension_thenReturnIfMatched
檢查字符串文件名fileName
是否以擴展名 .jpeg 結尾。
4。結論
總之,正則表達式錨點在Java
中可用於匹配文本中的模式。 \z 和 \Z 是匹配字符串結尾的兩個錨點,但當字符串以行終止符結尾時它們的行為不同。 \z 確保正則表達式匹配字符串的絕對結尾,而 \Z 匹配字符串的結尾或行的結尾。
通過使用適當的錨點,我們可以確保我們的正則表達式只匹配我們想要的文本,而不匹配它後面可能出現的任何其他文本。
了解 \z 和 \Z 之間的區別將有助於我們在 Java 代碼中編寫更準確的正則表達式。
GitHub 上提供了本教程的完整源代碼。