日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 正则表达式语法_Java 正则表达式基础语法

發布時間:2024/9/19 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 正则表达式语法_Java 正则表达式基础语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基礎符號

首尾匹配^:匹配輸入字符串開始的位置

$:匹配輸入字符串結尾的位置

例:"^hello$"含義為該字符串開頭必須為h,結尾必須為oprivate static void demo1() {

String content = "hello";

String pattern = "^hello$";

boolean isMatch = Pattern.matches(pattern, content);

System.out.println(content + "與" + pattern + "是否匹配?" + isMatch);

}

匹配數量:*:0個或多個

+:一個或多個

?:0個或1個

{n}:n個

{n,}:n到無窮多個

{n,m}:n到m個

例:匹配0-6個hprivate static void demo2() {

String[] s = {"h", "hh", "hhh", "hhhh", "hhhhh", "hhhhhh"};

String[] p = {"h+", "h*", "h?", "h{3}", "h{3,}", "h{3,5}"};

for (String content : s) {

for (String pattern : p) {

boolean isMatch = Pattern.matches(pattern, content);

System.out.println(content + "\t與\t" + pattern + "\t是否匹配?\t" + isMatch);

}

}

}h+h*h?h{3}h{3,}h{3,5}空字符串011000

h111000

hh110000

hhh110111

hhhh110011

hhhhh110011

hhhhhh110010

捕獲方式:(pattern):()表示捕獲分組,()會把每個分組里的匹配的值保存起來,從左向右,以分組的左括號為標志,第一個出現的分組的組號為1,第二個為2,以此類推

(?:pattern):表示非捕獲分組,和捕獲分組唯一的區別在于,非捕獲分組匹配的值不會保存起來

(?=pattern):正向肯定預查,匹配pattern前面的位置。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。

(?!pattern):正向否定預查(negative assert),在任何不匹配pattern的字符串開始處匹配查找字符串。這是一個非獲取匹配,也就是說,該匹配不需要獲取供以后使用。

(?<=pattern):反向(look behind)肯定預查,與正向肯定預查類似,只是方向相反。

(?

方括號:

[xyz]:匹配x或y或z

[^xyz]:匹配除了x、y、z的其他字符

[a-z]:匹配小寫字母

轉義:\b\B:\b匹配一個字邊界,即字與空格間的位置。例如,"lo\b"匹配"hello"中的"ol",但不匹配"look"中的"lo"。\B反之。

\cx:\cx 匹配control + 控制字符\cI 匹配 control + I,等價于 \t,

\cJ匹配 control + J,等價于 \n,

\cM匹配 control + M,等價于 \r

\ca \cb \cc ... 又分別匹配 control+a, control+b,control+c....,看運行的程序而定

\d\D:\d匹配數字。\D匹配非數字

\f:匹配分頁符。等效于 \x0c 和 \cL。

\n:匹配換行符。等效于 \x0a 和 \cJ。

\r:匹配回車符。等效于 \x0d 和 \cM。

\s\S:\s匹配任何空白字符,包括空格、制表符、換頁符等。與 [ \f\n\r\t\v] 等效。

\t:制表符匹配。與 \x09 和 \cI 等效。cv

\v:匹配垂直制表符。與 \x0b 和 \cK 等效。

\w\W:\w匹配任何字類字符,包括下劃線。與"[A-Za-z0-9_]"等效。\W反之

捕獲組

從正則表達式左側開始,每出現一個左括號"("記做一個分組,分組編號從1開始。0代表整個表達式。而命名則在括號中加入?給其命名

比如對于時間字符串:2019-01-20,表達式如下:(?\\d{4})-(?(?\\d{2})-(?\\d{2}))

有4個左括號,所以有4個分組:編號名稱捕獲組匹配00(\d{4})-((\d{2})-(\d{2})) ? ?整體2019-01-20

1year(\d{4})2019

2md((\d{2})-(\d{2}))01-20

3month(\d{2})01

4date(\d{2})20

示例代碼:private static void demo5() {

Pattern p = Pattern.compile("(\\d{4})-((\\d{2})-(\\d{2}))");

Matcher m = p.matcher("2019-01-20");

m.find();

System.out.println("m.group(0) value: "+m.group(0));

System.out.println("m.group(1) value: "+m.group(1));

System.out.println("m.group(2) value: "+m.group(2));

System.out.println("m.group(3) value: "+m.group("month"));

System.out.println("m.group(4) value: "+m.group("date"));

}

//輸出:

//m.group(0) value: 2019-01-20

//m.group(1) value: 2019

//m.group(2) value: 01-20

//m.group(3) value: 01

//m.group(4) value: 20

Java常用類

Pattern 類:pattern 對象是一個正則表達式的編譯表示。Pattern 類沒有公共構造方法。要創建一個 Pattern 對象,你必須首先調用其公共靜態編譯方法,它返回一個 Pattern 對象。該方法接受一個正則表達式作為它的第一個參數。

Matcher 類:Matcher 對象是對輸入字符串進行解釋和匹配操作的引擎。與Pattern 類一樣,Matcher 也沒有公共構造方法。你需要調用 Pattern 對象的 matcher 方法來獲得一個 Matcher 對象。

PatternSyntaxException類:是一個非強制異常類,它表示一個正則表達式模式中的語法錯誤。

Matcher方法

索引方法序號方法說明1public int start()返回以前匹配的初始索引。

2public int start(int group)返回在以前的匹配操作期間,由給定組所捕獲的子序列的初始索引

3public int end()返回最后匹配字符之后的偏移量。

4public int end(int group)返回在以前的匹配操作期間,由給定組所捕獲子序列的最后字符之后的偏移量。

public class RegexMatches {

public static void main(String[] args) {

Pattern p = Pattern.compile("\\bwen\\b");

Matcher m = p.matcher("wen wen wenXXX wen"); // 獲取 matcher 對象

int count = 0;

while (m.find()) {

count++;

System.out.print("第" + count+"個匹配值 ");

System.out.print("起始索引: " + m.start());

System.out.print(" 結束索引: " + m.end());

System.out.println();

}

}

private static void demo() {

Pattern p = Pattern.compile("(\\d{4})-((\\d{2})-(\\d{2}))");

Matcher m = p.matcher("2019-01-20");

m.find();

for(int i=0;i<5;i++){

System.out.println("第"+i+"個組"+"索引 "+m.start(i)+" 值:"+m.group(i));

}

}

}

main輸出:第1個匹配值 起始索引: 0 結束索引: 3

第2個匹配值 起始索引: 4 結束索引: 7

第3個匹配值 起始索引: 15 結束索引: 18

demo輸出:第0個組索引 0 值:2019-01-20

第1個組索引 0 值:2019

第2個組索引 5 值:01-20

第3個組索引 5 值:01

第4個組索引 8 值:20

查找方法序號方法說明1public boolean lookingAt()判斷開頭區域是否與正則表達式匹配。

2public boolean find()嘗試查找與該表達式匹配的輸入序列的下一個子序列。

3public boolean find(int start)重置此匹配器,然后嘗試查找匹配該模式、從指定索引開始的輸入序列的下一個子序列。

4public boolean matches()判斷整個區域是否與正則表達式匹配。

例:public class RegexMatches2 {

public static void main(String[] args) {

Pattern pattern = Pattern.compile("foo");

Matcher matcher = pattern.matcher("fooooooooooooooooo");

Matcher matcher2 = pattern.matcher("ooooofoooooooooooo");

System.out.println("lookingAt(): " + matcher.lookingAt());

System.out.println("matches(): " + matcher.matches());

System.out.println("lookingAt(): " + matcher2.lookingAt());

}

}

輸出:lookingAt(): true

matches(): false

lookingAt(): false

替換方法序號方法說明1public Matcher appendReplacement(StringBuffer sb, String replacement)實現非終端添加和替換步驟。

2public StringBuffer appendTail(StringBuffer sb)實現終端添加和替換步驟。

3public String replaceAll(String replacement)替換模式與給定替換字符串相匹配的輸入序列的每個子序列。

4public String replaceFirst(String replacement)替換模式與給定替換字符串匹配的輸入序列的第一個子序列。

5public static String quoteReplacement(String s)返回指定字符串的字面替換字符串。這個方法返回一個字符串,就像傳遞給Matcher類的appendReplacement 方法一個字面字符串一樣工作。

replaceAll案例:private static void demo1() {

String dog = "I have a dog. The dog very cute.";

Pattern p = Pattern.compile("dog");

Matcher m = p.matcher(dog);

dog = m.replaceAll("cat");

System.out.println(dog);

}

輸出:I have a cat. The cat very cute.

replaceFirst案例:private static void demo2() {

String dog = "I have a dog. The dog very cute.";

Pattern p = Pattern.compile("dog");

Matcher m = p.matcher(dog);

dog = m.replaceFirst("cat");

System.out.println(dog);

}

輸出:I have a cat. The dog very cute.

appendReplacement 和 appendTail 方法private static void demo3() {

Pattern p = Pattern.compile("a*b");

// 獲取 matcher 對象

Matcher m = p.matcher("aabfooaabfooabfoobkkk");

StringBuffer sb = new StringBuffer();

while(m.find()){

m.appendReplacement(sb,"-");

System.out.println(sb.toString());

}

m.appendTail(sb);

System.out.println(sb.toString());

}

總結

以上是生活随笔為你收集整理的java 正则表达式语法_Java 正则表达式基础语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。