<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java 正則表達式教程 原文:http://zetcode.com/java/regex/ Java 正則表達式教程展示了如何使用正則表達式解析 Java 中的文本。 ## 正則表達式 正則表達式用于文本搜索和更高級的文本操作。 正則表達式內置在包括`grep`和`sed`的工具,包括 vi 和 emacs 的文本編輯器,包括 Perl,Java 和 C# 的編程語言中。 Java 具有用于處理正則表達式的內置 API。 它位于`java.util.regex`中。 正則表達式定義字符串的搜索模式。 `Pattern`是正則表達式的編譯表示。 `Matcher`是一種引擎,可解釋模式并針對輸入字符串執行匹配操作。 匹配器具有諸如`find()`,`matches()`和`end()`之類的方法來執行匹配操作。 如果存在解析正則表達式的異常,則 Java 會拋出`PatternSyntaxException`。 ## 正則表達式示例 下表顯示了幾個正則表達式字符串。 | 正則表達式 | 含義 | | --- | --- | | `.` | 匹配任何單個字符。 | | `?` | 一次匹配或根本不匹配前面的元素。 | | `+` | 與前面的元素匹配一次或多次。 | | `*` | 與前面的元素匹配零次或多次。 | | `^` | 匹配字符串中的起始位置。 | | `$` | 匹配字符串中的結束位置。 | | <code>&#124;</code> | 備用運算符。 | | `[abc]` | 匹配`a`或`b`或`c`。 | | `[a-c]` | 范圍; 匹配`a`或`b`或`c`。 | | `[^abc]` | 否定,匹配除`a`或`b`或`c`之外的所有內容。 | | `\s` | 匹配空白字符。 | | `\w` | 匹配單詞字符; 等同于`[a-zA-Z_0-9]` | ## Java 簡單正則表達式 在第一個示例中,我們將單詞匹配單詞列表。 `JavaRegexEx.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexEx { public static void main(String[] args) { List<String> words = Arrays.asList("Seven", "even", "Maven", "Amen", "eleven"); Pattern p = Pattern.compile(".even"); for (String word: words) { Matcher m = p.matcher(word); if (m.matches()) { System.out.printf("%s matches%n", word); } else { System.out.printf("%s does not match%n", word); } } } } ``` 在示例中,列表中有五個單詞。 我們檢查哪些單詞與`.even`正則表達式匹配。 ```java Pattern p = Pattern.compile(".even"); ``` 我們編譯模式。 點(。)元字符代表文本中的任何單個字符。 ```java for (String word: words) { Matcher m = p.matcher(word); if (m.matches()) { System.out.printf("%s matches%n", word); } else { System.out.printf("%s does not match%n", word); } } ``` 我們瀏覽一下單詞表。 使用`matcher()`方法創建一個匹配器。 如果單詞與正則表達式匹配,則`matches()`方法返回`true`。 ```java Seven matches even does not match Maven does not match Amen does not match eleven does not match ``` 這是輸出。 ## Java Regex 錨點 錨點匹配給定文本內字符的位置。 在下一個示例中,我們查看字符串是否位于句子的開頭。 `JavaRegexAnchor.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexAnchor { public static void main(String[] args) { List<String> sentences = Arrays.asList("I am looking for Jane.", "Jane was walking along the river.", "Kate and Jane are close friends."); Pattern p = Pattern.compile("^Jane"); for (String word : sentences) { Matcher m = p.matcher(word); if (m.find()) { System.out.printf("%s matches%n", word); } else { System.out.printf("%s does not match%n", word); } } } } ``` 我們有三個句子。 搜索模式為`^Jane`。 該模式檢查`"Jane"`字符串是否位于文本的開頭。 `Jane\.$`會在句子結尾處查找`"Jane"`。 ## Java Regex 交替 交替運算符| 可以創建具有多種選擇的正則表達式。 `JavaRegexAlternation.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexAlternation { public static void main(String[] args) { List<String> users = Arrays.asList("Jane", "Thomas", "Robert", "Lucy", "Beky", "John", "Peter", "Andy"); Pattern p = Pattern.compile("Jane|Beky|Robert"); for (String user : users) { Matcher m = p.matcher(user); if (m.matches()) { System.out.printf("%s matches%n", user); } else { System.out.printf("%s does not match%n", user); } } } } ``` 列表中有 9 個名字。 ```java Pattern p = Pattern.compile("Jane|Beky|Robert"); ``` 此正則表達式查找`"Jane"`,`"Beky"`或`"Robert"`字符串。 ## Java Regex 捕獲組 捕獲組技術是一種將多個字符視為一個單元的方法。 通過將字符放置在一組圓括號內來創建它們。 例如,`(book)`是包含`'b', 'o', 'o', 'k'`字符的單個組。 捕獲組技術使我們能夠找出字符串中與常規模式匹配的那些部分。 `Matcher`的`group()`方法返回在先前的匹配操作期間給定組捕獲的輸入子序列。 `JavaRegexGroups.java` ```java package com.zetcode; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexGroups { public static void main(String[] args) { String content = "<p>The <code>Pattern</code> is a compiled " + "representation of a regular expression.</p>"; Pattern p = Pattern.compile("(</?[a-z]*>)"); Matcher matcher = p.matcher(content); while (matcher.find()) { System.out.println(matcher.group(1)); } } } ``` 本示例通過捕獲一組字符來打印提供的字符串中的所有 HTML 標簽。 ```java <p> <code> </code> </p> ``` 這是輸出。 ## Java Regex 替換字符串 可以用`replaceAll()`和`replaceFirst()`方法替換字符串。 該方法返回修改后的字符串。 `JavaRegexReplacingStrings.java` ```java package com.zetcode; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; public class JavaRegexReplacingStrings { public static void main(String[] args) throws MalformedURLException, IOException { URL url = new URL("http://www.something.com"); try (InputStreamReader isr = new InputStreamReader(url.openStream(), StandardCharsets.UTF_8); BufferedReader br = new BufferedReader(isr)) { String content = br.lines().collect( Collectors.joining(System.lineSeparator())); Pattern p = Pattern.compile("<[^>]*>"); Matcher matcher = p.matcher(content); String stripped = matcher.replaceAll(""); System.out.println(stripped); } } } ``` 該示例讀取網頁的 HTML 數據,并使用正則表達式剝離其 HTML 標簽。 ```java Pattern p = Pattern.compile("<[^>]*>"); ``` 此模式定義與 HTML 標簽匹配的正則表達式。 ```java String stripped = matcher.replaceAll(""); ``` 我們使用`replaceAll()`方法刪除所有標簽。 ## Java Regex 分割文本 可以使用`Pattern`的`split()`方法分割文本。 `data.csv` ```java 22, 1, 3, 4, 5, 17, 18 2, 13, 4, 1, 8, 4 3, 21, 4, 5, 1, 48, 9, 42 ``` 我們從`data.csv`文件中讀取。 `JavaRegexSplitText.java` ```java package com.zetcode; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; import java.util.regex.Pattern; public class JavaRegexSplitText { static int sum = 0; public static void main(String[] args) throws IOException { Path myPath = Paths.get("src/main/resources/data.csv"); List<String> lines = Files.readAllLines(myPath); String regex = ","; Pattern p = Pattern.compile(regex); lines.forEach((line) -> { String[] parts = p.split(line); for (String part : parts) { String val = part.trim(); sum += Integer.valueOf(val); } }); System.out.printf("Sum of values: %d", sum); } } ``` 這些示例從 CSV 文件讀取值并計算它們的總和。 它使用正則表達式讀取數據。 ```java List<String> lines = Files.readAllLines(myPath); ``` 一次拍攝,我們用`Files.readAllLines()`將所有數據讀入字符串列表。 ```java String regex = ","; ``` 正則表達式是逗號字符。 ```java lines.forEach((line) -> { String[] parts = p.split(line); for (String part : parts) { String val = part.trim(); sum += Integer.valueOf(val); } }); ``` 我們遍歷行,并使用`split`將它們拆分為字符串數組。 我們用`trim()`分隔空格并計算總和值。 ## Java 不區分大小寫的正則表達式 通過設置`Pattern.CASE_INSENSITIVE`標志,我們可以實現不區分大小寫的匹配。 `JavaRegexCaseInsensitive.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexCaseInsensitive { public static void main(String[] args) { List<String> users = Arrays.asList("dog", "Dog", "DOG", "Doggy"); Pattern p = Pattern.compile("dog", Pattern.CASE_INSENSITIVE); users.forEach((user) -> { Matcher m = p.matcher(user); if (m.matches()) { System.out.printf("%s matches%n", user); } else { System.out.printf("%s does not match%n", user); } }); } } ``` 該示例對正則表達式執行不區分大小寫的匹配。 ```java Pattern p = Pattern.compile("dog", Pattern.CASE_INSENSITIVE); ``` 通過將`Pattern.CASE_INSENSITIVE`作為第二個參數設置為`Pattern.compile()`來設置不區分大小寫的匹配。 ## Java Regex 子模式 子模式是模式中的模式。 子模式使用`()`字符創建。 `JavaRegexSubpatterns.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexSubpatterns { public static void main(String[] args) { List<String> words = Arrays.asList("book", "bookshelf", "bookworm", "bookcase", "bookish", "bookkeeper", "booklet", "bookmark"); Pattern p = Pattern.compile("book(worm|mark|keeper)?"); for (String word : words) { Matcher m = p.matcher(word); if (m.matches()) { System.out.printf("%s matches%n", word); } else { System.out.printf("%s does not match%n", word); } } } } ``` 該示例創建一個子模式。 ```java Pattern p = Pattern.compile("book(worm|mark|keeper)?"); ``` 正則表達式使用子模式。 它與書呆子,書簽,簿記員和書本單詞匹配。 ## Java Regex 電子郵件示例 在以下示例中,我們創建一個用于檢查電子郵件地址的正則表達式模式。 `JavaRegexEmail.java` ```java package com.zetcode; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; public class JavaRegexEmail { public static void main(String[] args) { List<String> emails = Arrays.asList("luke@gmail.com", "andy@yahoocom", "34234sdfa#2345", "f344@gmail.com"); String regex = "^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\\.[a-zA-Z.]{2,18}$"; Pattern p = Pattern.compile(regex); for (String email : emails) { Matcher m = p.matcher(email); if (m.matches()) { System.out.printf("%s matches%n", email); } else { System.out.printf("%s does not match%n", email); } } } } ``` 本示例僅提供一種可能的解決方案。 ```java String regex = "^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\\.[a-zA-Z.]{2,18}$"; ``` 前`^`和后`$`個字符提供精確的模式匹配。 模式前后不允許有字符。 電子郵件分為五個部分。 第一部分是本地部分。 這通常是公司,個人或昵稱的名稱。 `[a-zA-Z0-9._-]+`列出了所有可能的字符,我們可以在本地使用。 它們可以使用一次或多次。 第二部分由文字`@`字符組成。 第三部分是領域部分。 通常是電子郵件提供商的域名,例如 yahoo 或 gmail。 `[a-zA-Z0-9-]+`是一個字符集,提供了可在域名中使用的所有字符。 `+`量詞使用這些字符中的一個或多個。 第四部分是點字符。 它前面有轉義字符(`\`)。 這是因為點字符是一個元字符,并且具有特殊含義。 通過轉義,我們得到一個文字點。 最后一部分是頂級域:`[a-zA-Z.]{2,18}`。 頂級域可以包含 2 到 18 個字符,例如`sk, net, info, travel, cleaning, travelinsurance`。 最大長度可以為 63 個字符,但是今天大多數域都少于 18 個字符。 還有一個點字符。 這是因為某些頂級域包含兩個部分: 例如`co.uk`。 在本教程中,我們使用了 Java 中的正則表達式。 您可能也對相關教程感興趣: [Java 教程](/lang/java/)或[用 Java](/articles/javareadtext/) 讀取文本文件。
                  <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>

                              哎呀哎呀视频在线观看