詳細介紹Java正規表示式之單字元匹配和預定義字元

2022-11-23 18:01:43
本篇文章給大家帶來了關於的相關知識,其中主要介紹了關於單字元匹配和預定義字元的相關內容,下面一起來看一下,希望對大家有幫助。

程式設計師必備介面測試偵錯工具:

推薦學習:《》

一、需求

現有一個字串,需滿足如下要求:

  • [6, 18] 個字元

  • 只能包含字母、數位、下劃線

  • 需以字母開頭

如果字串滿足上述要求,返回 true,否則返回 false

   public static boolean validString(String s) {
       return s.matches("[a-zA-Z][a-zA-Z0-9_]{5,17}");
   }
登入後複製

正規表示式用極簡的規則取代了複雜的驗證邏輯

Regex Expression

正規表示式是一種通用的技術,適用於多種程式語言

二、單字元匹配(6個)

1. [abc]:字串的某個位置(某一個字元)滿足 a、b、c 中的一個

某個位置:該【單字元匹配】放的位置

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[zgq]";
        System.out.println("z".matches(regex)); // true
        System.out.println("g".matches(regex)); // true
        System.out.println("q".matches(regex)); // true
        System.out.println("zgq".matches(regex)); // false
    }}
登入後複製
public class TestDemo {
    public static void main(String[] args) {
        String regex = "26[abc]3q";
        System.out.println("26a3q".matches(regex)); // true
        System.out.println("26abc".matches(regex)); // false
        System.out.println("26b3q".matches(regex)); // true 
    }}
登入後複製

2. [^abc]:除了 a、b、c 之外的任意單個字元

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[^cat]666";
        System.out.println("c666".matches(regex)); // false
        System.out.println("a666".matches(regex)); // false
        System.out.println("t666".matches(regex)); // false
        System.out.println("bb666".matches(regex)); // false
        System.out.println("b666".matches(regex)); // true
    }}
登入後複製
public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[12345]666";
        String regex2 = "[^1-5]666";
        System.out.println("1666".matches(regex1)); // true
        System.out.println("3666".matches(regex1)); // true
        System.out.println("5666".matches(regex1)); // true
        System.out.println("6666".matches(regex1)); // false

        System.out.println("1666".matches(regex2)); // false
        System.out.println("3666".matches(regex2)); // false
        System.out.println("5666".matches(regex2)); // false

        System.out.println("6666".matches(regex2)); // true
    }}
登入後複製

3. [a-zA-z]:匹配單個英文字母

public class TestDemo {
    public static void main(String[] args) {
        String regex = "[a-zA-Z]666";
        System.out.println("6666".matches(regex)); // false
        System.out.println("b666".matches(regex)); // true
    }}
登入後複製

4. [a-d[1-6]]:和 [a-d1-6] 一樣(並集)

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[a-d[1-6]]";
        String regex2 = "[a-d1-6]";
        System.out.println("a".matches(regex1)); // true
        System.out.println("e".matches(regex1)); // false
        System.out.println("1".matches(regex1)); // true
        System.out.println("7".matches(regex1)); // false

        System.out.println("a".matches(regex2)); // true
        System.out.println("e".matches(regex2)); // false
        System.out.println("1".matches(regex2)); // true
        System.out.println("7".matches(regex2)); // false
    }}
登入後複製

5. [zgq&&[god]]:交集

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[zgq&&[god]]";
        System.out.println("q".matches(regex1)); // false
        System.out.println("d".matches(regex1)); // false
        System.out.println("g".matches(regex1)); // true
    }}
登入後複製

6. [zgq&&[god]]:取差集

public class TestDemo {
    public static void main(String[] args) {
        String regex1 = "[zgq&&[^god]]";
        System.out.println("q".matches(regex1)); // true
        System.out.println("d".matches(regex1)); // false
        System.out.println("g".matches(regex1)); // false
        System.out.println("z".matches(regex1)); // true

        // 取差集, 從字母 a 到字母 z 中去除字母 b 和 d
        String regex2 = "[a-z&&[^bd]]";
        System.out.println("d".matches(regex2)); // false
        System.out.println("a".matches(regex2)); // true
    }}
登入後複製

三、預定義字元(7個)

預定義字元匹配的仍然是單個字元

.】:任意單個字元
\d】:數位
\D】:非數位
\s】:空白
\S】:非空白
\w】:字母(英文字母、下劃線、數位)
\W】:非英文字母

Java 中需以兩個【\】開頭表示預定義字元

public class TestDemo {
    public static void main(String[] args) {
        String r1 = ".";
        System.out.println("@".matches(r1)); // true
        System.out.println("慶".matches(r1)); // true
        System.out.println("I".matches(r1)); // true
        System.out.println(" ".matches(r1)); // true
        System.out.println(".".matches(r1)); // true
    }}
登入後複製
public class TestDemo {
    public static void main(String[] args) {
        // 匹配 java 檔案
        String r1 = ".\\.java";
        System.out.println("a.java".matches(r1)); // true
        System.out.println("xjava".matches(r1)); // false
        System.out.println("5java".matches(r1)); // false
    }}
登入後複製
public class TestDemo {
    public static void main(String[] args) {
        String r1 = "[abc]";
        String r2 = "\\[abc\\]";
        System.out.println("a".matches(r1)); // true
        System.out.println("c".matches(r1)); // true
        System.out.println("[abc]".matches(r1)); // false

        System.out.println("a".matches(r2)); // false
        System.out.println("c".matches(r2)); // false
        System.out.println("[abc]".matches(r2)); // true
    }}
登入後複製

推薦學習:《》

以上就是詳細介紹Java正規表示式之單字元匹配和預定義字元的詳細內容,更多請關注TW511.COM其它相關文章!