1. 程式人生 > >Java 正則表示式從入門到“跑路”

Java 正則表示式從入門到“跑路”

日常開發中我們經常會遇到驗證使用者輸入資訊的地方,而某些驗證就要用到正則表示式。之前總感覺正則神祕莫測,如果你也有同感?那接下來將為你揭開它神祕的面紗。

這裡寫圖片描述

基本概念

正則表示式:具有一定規則的字串。

組成規則

常用組成規則:

字元 
x  字元 x 
\\ 反斜線字元 

字元類 
[abc] a、b 或 c(簡單類) 
[^abc] 任何字元,除了 a、b 或 c(否定) 
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(範圍) 

預定義字元類 
. 任何字元(與行結束符可能匹配也可能不匹配) 
\d 數字:[0-9] 
\D 非數字: [^0-9]
\s 空白字元:[ \t\n\x0B\f\r] \S 非空白字元:[^\s] \w 單詞字元:[a-zA-Z_0-9] \W 非單詞字元:[^\w] 邊界匹配器 ^ 行的開頭 $ 行的結尾 \b 單詞邊界 \B 非單詞邊界 \A 輸入的開頭 \G 上一個匹配的結尾 \Z 輸入的結尾,僅用於最後的結束符(如果有的話) \z 輸入的結尾 Greedy 數量詞 X? X,一次或一次也沒有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超過 m 次

更多規則檢視API Pattern類


如果看到這些規則感到比較困惑,請看下面例項!

1.判斷功能

String類提供了matches()判定字串是否匹配給定的正則表示式。
比如驗證使用者輸入的郵箱是否合法?

public class Test {

    public static void main(String[] args) {
        // 不考慮@符號前字元個數限制的問題
        // [email protected]
        // [email protected]
        // [email protected]
        // [email protected]
// 測試郵箱 String email = "[email protected]"; // 規則 String regex = "[a-zA-Z_0-9][email protected]([a-zA-Z_0-9]{2,4}\\.)+[a-zA-Z]{3}"; //String regex = "\\[email protected](\\w{2,4}\\.)+[a-zA-Z]{3}";//可以替換為這個 // 判定 boolean b = email.matches(regex); System.out.println(b);// true //由於@字元後magic串長度不符合{2,4}至少 2 次,但是不超過 4次規則,所以返回false String email2 = "[email protected]"; boolean b2 = email2.matches(regex); System.out.println(b2);// false } }

注:一般可以將郵箱分為四個部分[使用者申請名][@符號][二級域名部分.][頂級域名部分],上面測試郵箱中,使用者申請名包含純字元,純數字,字元數字混合統一來說就是字元 所以用[a-zA-Z_0-9]代替,後面的+是(X+ X,一次或多次 )代表字元個數; @符號是唯一的所以只寫@,後面未標識數量預設是一; 二級域名部分163. yeah. qq. vip.字元長度最小為2,最大為4,所以為\w{2,4}\. 但是由於vip.後面多了個sina.所以\w{2,4}\.這個匹配數量為 一次或多次為([a-zA-Z_0-9]{2,4}\.)+;頂級域名部分為com com net com 都是字元且字元數量都是3,所以為[a-zA-Z]{3}。

2.分割功能

String類提供了split()根據給定正則表示式的匹配拆分此字串。
比如獲取Url的傳輸協議是https還是http?

        //url
        String url = "http://www.baidu.com";
        String url = "https://www.tmall.com";
        //指定分割規則,返回字串陣列
        String[] strs = url.split("://");
        System.out.println(strs[0]);// http
        System.out.println(strs[1]);// www.baidu.com

3.替換功能

String類提供了replace()替換此字串所有匹配給定的正則表示式的子字串。

//newChar 替換此字串中出現的所有 oldChar
String replace(char oldChar, char newChar)
//字面值替換序列替換此字串所有匹配字面值目標序列的子字串
String replace(CharSequence target, CharSequence replacement)
//replacement 替換此字串所有匹配給定的正則表示式的子字串
String replaceAll(String regex, String replacement)
// replacement 替換此字串匹配給定的正則表示式第一個子字串
String replaceFirst(String regex, String replacement)

比如替換字串中的雙11.11為*?

//測試字串、替換掉字串中的雙11
        String s="Sea surface Ch11.11oudai focusing ,wa11.11rm spring flo11.11wers.";
        //替換規則
        String regex3="\\d+\\.\\d+";//表示0-9的數字出現一次或多次 (.) 0-9的數字出現一次或多次 
        //引數指定替換後的字元
        String ss=s.replaceAll(regex3,"*");
        System.out.println(ss);//Sea surface Ch*oudai focusing , wa*rm spring flo*wers. 

4.獲取功能

獲取功能需要模式物件Pattern類和匹配物件Matcher共同完成。
比如獲取字串中為兩位數字的資料?

        // 測試字串資料
        String s = "Sea surface Ch11.11oudai focusing , wa11.11rm spring flo11.11wers. ";
        // 規則
        String regex4 = "\\d{2}";//表示0-9的數字出現2次
        // 生成模式物件
        Pattern pattern = Pattern.compile(regex4);
        // 生成匹配物件
        Matcher matcher = pattern.matcher(s);
        while (matcher.find()) {
            String ss = matcher.group();
            System.out.print(ss + " ");
        }
        // 最終輸出 11 11 11 11 11 11

注:正則表示式基本使用就這些,不需要記,如果用到了查查API即可!

相關推薦

Java 表示式入門到“

日常開發中我們經常會遇到驗證使用者輸入資訊的地方,而某些驗證就要用到正則表示式。之前總感覺正則神祕莫測,如果你也有同感?那接下來將為你揭開它神祕的面紗。 基本概念 正則表示式:具有一定規則的字串。 組成規則 常用組成規則: 字元

java使用表示式一長串字元中獲取一段特徵字串

只能說String工具類太強大,導致一直以來,幾乎沒怎麼用到過正則表示式,現在突然要用到,參考正則表示式語法,摸索一上午才搞出來。記錄分享一下,以免忘記 從一長串字元中,截取出邀請碼,我想很多人都遇到過。 String s = "邀請您加入隨心購,自動搜尋淘寶天貓優惠券!先領券,再購

五年開發經驗告訴你什麼是Java表示式入門

一:什麼是正則表示式 1.定義: 正則表示式是一種可以用於模式匹配和替換的規範,一個正則表示式就是由普通的字元(例如字元a到z)以及特殊字元(元字元)組成的文字模式,它 用以描述在查詢文字主體時待匹配的一個或多個字串。正則表示式作為一個模板,將某個字元模式與所搜尋的字串進行匹配。 2

Java表示式入門

 眾所周知,在程式開發中,難免會遇到需要匹配、查詢、替換、判斷字串的情況發生,而這些情況有時又比較複雜,如果用純編碼方式解決,往往會浪費程式設計師的時間及精力。因此,學習及使用正則表示式,便成了解決這一矛盾的主要手段。 大 家都知道,正則表示式是一種可以用於模式匹配和替換的規範,一個正則表示式就是由普

java表示式學習筆記

本人在開發中使用正則表達的場景並不多,偶爾用一下,學習一波,時間久了就又忘記了,放到部落格中,說不定什麼時候就用到了。   一.正則表示式的語法 這個語法表來自:http://www.runoob.com/java/java-regular-expressions.html

JAVA表示式區分IPv4和IPv6地址

PS*程式碼直接見第二部分: 一、進入正題前先說說JAVA正則表示式相關概念: 1、常用字元類: [abc] == a||b||c   [a-zA-Z] == 所有大小寫字母中的任意一個      [0-9A-Za-z] == 任意

QT 用表示式tableView中篩選出某一日期範圍內的資料

QDate date1,date2; date1=ui->dateEdit_2->date();//提取開始時間 date2=ui->dateEdit_3->date();//提取結束時間 data_filter->

Java表示式過濾、替換,將一段文字中的英語單詞分別提取出,並統計詞頻,按詞頻排序。

最近在學習自然語言處理,在建立基礎標籤庫時,遇到一個需要提取語料中的英文單詞的工作,做好了現在來和大家分享下。 實現效果:讀取檔案內容,把其中的英文單詞提取出,並統計詞頻。提取時,原本不是連在一起的單詞可以分開獨立提取,例如:我的PPT和WORD,可以提取出PPT,WORD兩個單詞。 基本思

java表示式去除html中所有的標籤和特殊HTML字元

關於java正則表示式去除html中所有的標籤和特殊HTML字元,結合我所做的專案總結的經驗: 總共分為三種:第一種適用於適用短的文章,將文章用正則表示式的方式拼接到程式碼中,有些繁瑣,其實不太實用。第二種就是直接將文件引入,進行更改,但是有一個小缺點,就是文件中的格式可能是utf-8格式的

Java表示式實現港、澳、臺身份證驗證

最近由於業務的要求,需要進行港、澳、臺人員身份證驗證,現在直接上程式碼,經供參考學習,也為自己積累一些工具類: package com.qiu.validate; public class regexValidateCard { public String validateIdCard10(String id

JAVA表示式初探

今天有一個需求 ,提上來類似 123#223#2 這樣的字串,要把裡面的數字匹配出來,就看了一下java的正則 以前一直用python處理正則,相比之下java的正則功能是弱了一點 public static void main(String[] args) { Pat

20180716-Java表示式

import java.util.regex.Matcher;import java.util.regex.Pattern; public class RegexMatches{ public static void main(String[] args){ //按指定模式在字串查詢 String line

java表示式的使用:6位數字

public static void main(String[] args) { Pattern pattern = Pattern.compile("\\d{6}"); boolean matches = pattern.matcher("a21109").matches(); S

Java——表示式

正則表示式定義了字串的模式。 正則表示式可以用來搜尋、編輯或處理文字。 正則表示式並不僅限於某一種語言,但是在每種語言中有細微的差別。 java.util.regex 包主要包括以下三個類: Pattern 類: pattern 物件是一個正則表示式的編譯表示。Pattern

java表示式校驗

Pattern pattern = Pattern.compile("\\d+\\.\\d+$|-\\d+\\.\\d+$");//判斷是否為小數 Pattern pattern1 = Pattern.compile("^\\d+$|-\\d+$"); if (pattern.match

Java表示式匹配日期及基本使用

廢話不多說,直接上程式碼: package top.yangxianyang.test; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.junit.Test; public

Java表示式學習與記錄

轉載自:http://www.runoob.com/java/java-regular-expressions.html 正則表示式定義了字串的模式,用於搜尋、編輯或處理文字。 1、正則表示式中字元意義: \            將下一字元標

Java表示式應用小結

 案例: Pattern p = Pattern.compile("a*b"); // 生成Pattern例項(設定匹配模式【規則】)- 靜態方法 Matcher m = p.matcher("aaaaab");    // 生成Match例項(

java 表示式 複習

正則表示式在日常開發中會經常的接觸到,學會了正則可以更有效的對字元進行驗證、拆分、替換、判斷字串是否合法等操作。。。 常用語法: 字元的取值範圍 1.[abc] : 表示可能是a,可能是b,也可能是c。 2.[^abc]: 表示不是a,b,c中的任意一個 3.[a-zA-Z]: 表示

java表示式匹配所有相匹配的內容

java使用正則表示式匹配所有內容 ---- ** 構建正則表示式 String patternCode="baseid=\\w+"; String patternTitle="title=\\\"[\\u4e00-\\u9fa5]*·?[\\u4e00-\\u9fa5]*\\(?[