<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # Java 正則表達式教程 > 原文: [https://howtodoinjava.com/java-regular-expression-tutorials/](https://howtodoinjava.com/java-regular-expression-tutorials/) **正則表達式**用作字符串的**搜索模式**。 使用正則表達式,我們也可以找到一個或多個匹配項。 我們可以在字符串中查找匹配的任何國王,例如簡單字符,固定字符串或任何復雜的字符模式,例如電子郵件,SSN 或域名。 ## 1\. 正則表達式 正則表達式是強大,靈活和高效的文本處理的關鍵。 它允許您描述和解析文本。 正則表達式可以添加,刪除,隔離和折疊,紡錘并破壞各種文本和數據。 #### 1.1 元字符和字面值 完整的正則表達式由兩種類型的字符組成。 * *特殊字符*(類似于文件名中的`*`)稱為**元字符**。 * 其余的稱為**字面值**或*普通文本字符*。 正則表達式從其元字符提供的高級表達能力中受益。 我們可以將文本視為字面值,將元字符視為語法。 根據一組規則將單詞與語法結合在一起,以創建表達思想的表達。 #### 1.2 Java 正則表達式示例 讓我們看一個使用正則表達式作為參考的 Java 快速示例。 ```java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String[] args) { Pattern pattern = Pattern.compile("Alex|Brian"); Matcher matcher = pattern.matcher("Generally, Alex and Brian share a great bonding."); while (matcher.find()) { System.out.print("Start index: " + matcher.start()); System.out.print(" End index: " + matcher.end() + " "); System.out.println(" - " + matcher.group()); } } } ``` 程序輸出。 ```java Start index: 11 End index: 15 - Alex Start index: 20 End index: 25 - Brian ``` ## 2\. 正則表達式元字符 讓我們探索常用的元字符以更好地理解它們。 #### 2.1 行的起點和終點 起點和終點分別用`'^'`(脫字符)和`'$'`(美元)符號表示。 插入號和美元的特殊之處在于它們**與行**中的位置匹配,而不是與任何實際的文本字符本身匹配。 例如,正則表達式“`cat`”在字符串中的任何位置都可以找到“`cat`”,但是僅當“`cat`”位于行首時,“`^cat`”才匹配。 例如諸如“`category`”或“`catalog`”之類的詞。 同樣,“`cat$`”僅在“`cat`”位于行尾時匹配。 例如像“`scat`”之類的詞。 #### 2.2 字符類 通常稱為字符類的正則表達式構造`"[···]"`讓我們列出了比賽中該點要允許的字符。 字符類在創建拼寫檢查器時很有用。 例如,“`e`”僅與`e`匹配,而“`a`”僅與`a`匹配,而正則表達式`[ea]`則與之匹配。 例如`sep[ea]r[ea]te`將匹配所有單詞“`separate`”,“`separate`”和“`separete`”。 另一個示例可以是允許將單詞的第一個字母大寫,例如`[Ss]mith`將同時允許使用`smith`和`Smith`這兩個字。 同樣,`<[hH][123456]>`將匹配所有標題標簽,即`H1`,`H2`,`H3`,`H4`,`H5`和`H6`。 ###### 2.2.1 字符范圍 破折號`"-"`表示字符范圍。 `<[hH][1-6]>`與`<[hH][123456]>`相似。 其他有用的字符范圍是`[0-9]`和`[a-z]`,它們匹配數字和英文小寫字母。 我們可以在單個結構中指定多個范圍 `[0123456789abcdefABCDEF]`可以寫為`[0-9a-fA-F]`。 請注意,給出范圍的順序無關緊要。 請注意,破折號僅是字符類中的元字符,否則它與常規破折號匹配。 另外,如果它是范圍中列出的第一個字符,則它不可能表示范圍,因此在這種情況下將不是元字符。 ###### 2.2.2 否定字符類 如果我們在字符類中使用否定符號`^`,則該類與**未列出的任何字符匹配**。 例如 `[^1-6]`匹配的字符不是 1 到 6。 #### 2.3 將任何字符與點匹配 元字符`.`是與任何字符匹配的字符類的簡寫。 請注意,在字符類中使用點時,它們不是元字符。 在字符類中,它只是一個簡單的字符。 例如,`06.24.2019`將匹配`06/24/2019`或`06-24-2019`或`06.24.2019`。 但是 `06[.]24[.]2019`僅與`06.24.2019`匹配。 #### 2.4 匹配交替 - 幾個子表達式中的任何一個 管道符號`'|'`允許您將多個表達式組合成一個與任何單個表達式匹配的表達式。 例如,“`Alex`”和“`Brian`”是單獨的表達式,但是`Alex|Brian`是一個與兩者都匹配的表達式。 與點類似,在字符類中使用管道時,管道也不是元字符。 在字符類中,它只是一個簡單的字符。 例如,要匹配單詞“`First`”或“`1st`”,我們可以編寫正則表達式 – “`(First|1st)`”或簡寫為`"(Fir|1)st"`。 ## 3\. Java 正則表達式 API Java 具有內置的 API(`java.util.regex`)以使用正則表達式。 我們不需要任何第三方庫就可以對 Java 中的任何字符串運行正則表達式。 Java 正則表達式 API 提供 1 個接口和 3 個類: * **`Pattern`** – 必須將指定為字符串的正則表達式首先編譯為此類的實例。 然后,可以使用所得的模式來創建`Matcher`對象,該對象可以將任意字符序列與正則表達式進行匹配。 ```java Pattern p = Pattern.compile("abc"); Matcher m = p.matcher("abcabcabcd"); boolean b = m.matches(); //true ``` * **`Matcher`** – 此類提供執行匹配操作的方法。 * **`MatchResult`(接口)** – 這是匹配操作的結果。 它包含用于確定與正則表達式匹配的結果的查詢方法。 * **`PatternSyntaxException`** – 引發非受檢的異常,表示正則表達式模式中的語法錯誤。 詳細了解這些類和重要方法。 #### 3.1 `Pattern`類 它表示正則表達式的編譯表示。 要使用 Java 正則表達式 API,我們必須將正則表達式編譯為此類。 編譯后,其實例可用于創建`Matcher`對象,該對象可以將行/字符串與正則表達式匹配。 請注意,許多匹配器可以共享同一模式。 處理期間的狀態信息保存在`Matcher`實例中。 此類的實例為[**不可變的**](https://howtodoinjava.com/java/basics/how-to-make-a-java-class-immutable/),可以安全地由多個并發線程使用。 * **`Predicate asPredicate()`** - 創建可用于匹配字符串的 [Java 8 謂詞](https://howtodoinjava.com/java8/how-to-use-predicate-in-java-8/)。 * **`static Pattern compile(String regex)`** – 用于將給定的正則表達式編譯為模式。 * **`static Pattern compile(String regex, int flags)`** – 用于將給定的正則表達式編譯為帶有給定標志的模式。 * **`int flags()`** - 用于返回此模式的匹配標志。 * **`Matcher matcher(CharSequence input)`** – 用于創建匹配器,該匹配器將根據該模式匹配給定的輸入。 * **`static boolean match(String regex, CharSequence input)`** – 用于編譯給定的正則表達式,并嘗試將給定的輸入與其匹配。 * **`String.pattern()`** – 用于返回從中編譯此模式的正則表達式。 * **`static String quote(String s)`** – 用于返回指定字符串的字面模式串。 * **`String[] split(CharSequence input)`** – 用于在此模式的匹配項附近拆分給定的輸入序列。 * **`String[] split(CharSequence input, int limit)`** – 用于在此模式的匹配項附近分割給定的輸入序列。 * **`Stream splitAsStream(CharSequence input)`** – 根據該模式的匹配從給定的輸入序列創建[流](https://howtodoinjava.com/java8/java-streams-by-examples/)。 #### 3.2 `Matcher`類 它是通過解釋`Pattern`在字符串/行上執行匹配操作的主要類。 創建匹配器后,可將其用于執行各種匹配操作。 此類還定義了用新字符串替換匹配子序列的方法,如果需要,可以根據匹配結果計算其內容。 此類的實例是**不是[線程安全的](https://howtodoinjava.com/java/multi-threading/what-is-thread-safety/)**。 * **`boolean find()`** – 主要用于搜索文本中多個出現的正則表達式。 * **`boolean find(int start)`** – 用于從給定索引開始搜索文本中正則表達式的出現。 * **`int start()`** – 用于獲取使用`find()`方法找到的匹配項的開始索引。 * **`int end()`** – 用于獲取使用`find()`方法找到的匹配項的結束索引。 它返回最后一個匹配字符旁邊的字符索引。 * **`int groupCount()`** – 用于查找匹配的子序列的總數。 * **`String.group()`** – 用于查找匹配的子序列。 * **`boolean matchs()`** – 用于測試正則表達式是否與模式匹配。 * **`boolean lookingAt()`** – 嘗試從區域的開頭開始,將模式與輸入序列進行匹配。 * **`String quoteReplacement(String s)`** – 返回指定字符串的字面替換字符串。 * **`Matcher reset()`** – 重置此匹配器。 * **`MatchResult toMatchResult()`** – 以`MatchResult`的形式返回此匹配器的匹配狀態。 ## 4\. Java 正則表達式示例 閱讀下面給出的示例,以了解正則表達式在解決應用程序中這些特定問題方面的用法。 #### 電子郵件地址的正則表達式 學習使用 Java 中的正則表達式匹配電子郵件地址 ```java ^[a-zA-Z0-9_!#$%&'*+/=?`{|}~^.-]+@[a-zA-Z0-9.-]+$ ``` #### 用于密碼驗證的正則表達式 學習使用 Java 中的正則表達式匹配密碼 ```java ((?=.*[a-z])(?=.*d)(?=.*[@#$%])(?=.*[A-Z]).{6,16}) ``` #### 商標符號的正則表達式 學習使用 Java 中的正則表達式匹配商標符號 ```java \u2122 ``` #### 任何貨幣符號的正則表達式 學習使用 Java 中的正則表達式匹配貨幣符號 ```java \\p{Sc} ``` #### “希臘擴展”或希臘語腳本中任何字符的正則表達式 使用 Java 中的正則表達式學習在希臘擴展和希臘腳本中匹配字符 ```java \\p{InGreek} and \\p{InGreekExtended} ``` #### 北美電話號碼的正則表達式 學習使用 Java 中的正則表達式匹配北美電話號碼 ```java ^\\(?([0-9]{3})\\)?[-.\\s]?([0-9]{3})[-.\\s]?([0-9]{4})$ ``` #### 國際電話號碼的正則表達式 學習使用 Java 中的正則表達式匹配國際電話號碼 ```java ^\+(?:[0-9] ?){6,14}[0-9]$ ``` #### 日期格式的正則表達式 學習使用 Java 中的正則表達式匹配日期格式 ```java ^[0-3]?[0-9]/[0-3]?[0-9]/(?:[0-9]{2})?[0-9]{2}$ ``` #### 社會安全號碼(SSN)的正則表達式 學習使用 Java 中的正則表達式匹配 SSN ```java ^(?!000|666)[0-8][0-9]{2}-(?!00)[0-9]{2}-(?!0000)[0-9]{4}$ ``` #### 國際標準書號(ISBN)的正則表達式 學習使用 Java 中的正則表達式匹配 ISBN ```java ^(?: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]$ ``` #### 美國郵政編碼的正則表達式 學習使用 Java 中的正則表達式匹配美國郵政編碼 ```java ^[0-9]{5}(?:-[0-9]{4})?$ ``` #### 加拿大郵政編碼的正則表達式 學習使用 Java 中的正則表達式匹配加拿大郵政編碼 ```java ^(?!.*[DFIOQU])[A-VXY][0-9][A-Z] ?[0-9][A-Z][0-9]$ ``` #### 英國郵政編碼(郵政編碼)的正則表達式 學習使用 Java 中的正則表達式匹配英國郵政編碼 ```java ^[A-Z]{1,2}[0-9R][0-9A-Z]? [0-9][ABD-HJLNP-UW-Z]{2}$ ``` #### 信用卡號碼的正則表達式 學習使用 Java 中的正則表達式匹配信用卡號 ```java ^(?:(?4[0-9]{12}(?:[0-9]{3})?)| (?5[1-5][0-9]{14})| (?6(?:011|5[0-9]{2})[0-9]{12})| (?3[47][0-9]{13})| (?3(?:0[0-5]|[68][0-9])?[0-9]{11})| (?(?:2131|1800|35[0-9]{3})[0-9]{11}))$ ``` #### 更多正則表達式示例 [匹配字符串的開頭或結尾(行錨)](https://howtodoinjava.com/regex/start-end-of-string/) [匹配任何字符或字符集](https://howtodoinjava.com/regex/match-any-set-of-characters/) 請在注釋中向我發送與此 **java 正則表達式教程**有關的問題。 學習愉快! 參考文獻: [`java.util.regex`包](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/regex/package-summary.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看