最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java正則表達(dá)式用法大全(深度好文)

 更新時(shí)間:2023年10月24日 10:14:30   作者:小王寫不出程序  
這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式用法大全的相關(guān)資料,正則表達(dá)式在處理字符串時(shí)非常有用,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

一、概念

正則表達(dá)式(regex)是一個(gè)字符串,由字面值字符和特殊符號(hào)組成,是用來(lái)描述匹配一個(gè)字符串集合的模式,可以用來(lái)匹配、替換和拆分字符串。

例如可以檢查一個(gè)字符串是否含有某種子字符串、將匹配的子字符串做替換或者從某個(gè)字符串中取出符合某個(gè)條件的子字符串等。

二、正則表達(dá)式語(yǔ)法

字符匹配示例
  .任意單個(gè)字符,除換行符外jav.匹配java
 [  ][ ] 中的任意一個(gè)字符java匹配j[abc]va
  - [ ] 內(nèi)表示字符范圍java匹配[a-z]av[a-g]
  ^在[ ]內(nèi)的開頭,匹配除[ ]內(nèi)的字符之外的任意一個(gè)字符java匹配j[^b-f]va  
   |x|y匹配x或y
  \將下一字符標(biāo)記為特殊字符、文本、反向引用或八進(jìn)制轉(zhuǎn)義符

\(匹配(

$匹配輸入字符串結(jié)尾的位置。如果設(shè)置了 RegExp 對(duì)象的 Multiline 屬性,$ 還會(huì)與"\n"或"\r"之前的位置匹配。;$匹配位于一行及外圍的;號(hào)
*零次或多次匹配前面的字符zo*匹配zoo或z
+一次或多次匹配前面的字符zo+匹配zo或zoo
?零次或一次匹配前面的字符zo?匹配z或zo
p{n}n 是非負(fù)整數(shù)。正好匹配 n 次o{2}匹配food中的兩個(gè)o
p{n,}n 是非負(fù)整數(shù)。至少匹配 n 次o{2}匹配foood中的所有o
p{n,m}M 和 n 是非負(fù)整數(shù),其中 n <= m。匹配至少 n 次,至多 m 次o{1,3}匹配fooood中的三個(gè)o
\p{P}一個(gè)標(biāo)點(diǎn)字符 !"#$%&'()*+,-./:;<=>?@[\]^_'{|}~J\p{P}a匹配J?a
\b匹配一個(gè)字邊界va\b匹配java中的va,但不匹配javar中的va
\B非字邊界匹配va\B匹配javar中的va,但不匹配java中的va
\d數(shù)字字符匹配1[\\d]匹配13
\D非數(shù)字字符匹配[\\D]java匹配Jjava
\w單詞字符java匹配[\\w]ava
\W非單詞字符$java匹配[\\W]java
\s空白字符Java 2匹配Java\\s2
\S非空白字符java匹配 j[\\S]va
\f匹配換頁(yè)符等效于\x0c和\cL
\n匹配換行符

等效于\x0a和\cJ

注意:

  • 不要在重復(fù)詞符中使用空白。如B{3,6} ,不能寫成 B{3, 6}。
  • 可以使用括號(hào)來(lái)將模式分組。(ab){3}匹配ababab , 而ab{3} 匹配 abbb。

三、捕獲組

1. 捕獲組是把多個(gè)字符當(dāng)成一個(gè)單獨(dú)單元進(jìn)行處理的方法,它通過(guò)對(duì)括號(hào)內(nèi)的字符分組來(lái)創(chuàng)建。

捕獲組通過(guò)從左到右計(jì)算其括號(hào)來(lái)編號(hào)。

例如:在表達(dá)式((A)(B(C))) 中,存在四個(gè)這樣的組:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

2. 捕獲組可以通過(guò)調(diào)用matcher對(duì)象的groupCount方法來(lái)查看表達(dá)式有多少個(gè)分組。(groupCount方法返回一個(gè)int值,來(lái)表示matcher對(duì)象當(dāng)前有多少個(gè)捕獲組)

3. 還有一個(gè)特殊的組零(group(0)),它代表整個(gè)表達(dá)式。(該組不包括在groupCount的返回值中)

4.  以 (?) 開頭的組是純的非捕獲 組,它不捕獲文本,也不針對(duì)組合計(jì)進(jìn)行計(jì)數(shù)。

四、Pattern類與Matcher類

Java的正則表達(dá)式是由java.util.regex的Pattern和Matcher類實(shí)現(xiàn)的。Pattern對(duì)象表示經(jīng)編譯的正則表達(dá)式。靜態(tài)的compile( )方法負(fù)責(zé)將表示正則表達(dá)式的字符串編譯成Pattern對(duì)象。

1.matches( )

boolean flag = str.matches(regex);

可以快速判斷能否在str中找到regex。

2.split( )

String[ ]  ss = s.split(regex);

 用regex把字符串分隔開來(lái),返回String數(shù)組。

3.find( )

while(matcher.find(i)){
i++;
}

Matcher.find( )的功能是發(fā)現(xiàn)CharSequence里的,與pattern相匹配的多個(gè)字符序列。

4.group

A(B(C))D 里面有三個(gè)組:

group(0) 是 ABCD

group(1) 是 BC

group(2) 是 C

形式為 matcher.group( )

5.start( )和end( )

如果匹配成功,start( )會(huì)返回此次匹配的開始位置,end( )會(huì)返回此次匹配的結(jié)束位置,即最后一個(gè)字符的下標(biāo)加一。

如果之前的匹配不成功(或者沒(méi)匹配),那么無(wú)論是調(diào)用start( )還是end( ),都會(huì)引發(fā)一 個(gè)IllegalStateException。

matcher.start( );
matcher.end( );

6.replace替換

replaceFirst(String replacement)將字符串里,第一個(gè)與模式相匹配的子串替換成replacement。

replaceAll(String replacement),將輸入字符串里所有與模式相匹配的子串全部替換成replacement。

String result = s.replaceAll(regex,ss);
String result = s.replaceFirst(regex,ss);

7.reset( )

 用reset( )方法可以給現(xiàn)有的Matcher對(duì)象配上個(gè)新的CharSequence。

如果不給參數(shù),reset( )會(huì)把Matcher設(shè)到當(dāng)前字符串的開始處。

m.reset("java");

8.代碼演示 

package zuoye2;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EXjava {

	public static void main(String[] args) {
		String example = "This is a small example string";
		Pattern pattern = Pattern.compile("\\w+");
		//如果想忽略大小寫敏感度,可以使用線面這個(gè)語(yǔ)句
		//Pattern pattern = Pattern.compile("\\s+",Patttern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(example);
		while(matcher.find()) {
			System.out.print("start index: "+matcher.start());
			System.out.print(" end index: "+ matcher.end()+" ");
			System.out.println(matcher.group());
		}
		//創(chuàng)建一個(gè)新的pattern和matcher以用選項(xiàng)卡替換空格s
		Pattern replace = Pattern.compile("\\s+");
		Matcher matcher2 = replace.matcher(example);
		System.out.println(matcher2.replaceAll("\t"));
		
	}
}

五、正則表達(dá)式在Java中的應(yīng)用

1.判斷功能

例:判斷輸入的手機(jī)號(hào)是否為13或者18開頭

package zuoye2;
import java.util.Scanner;
public class EXjava {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		System.out.print("請(qǐng)輸入手機(jī)號(hào):");
		String str = input.nextLine();
		String regex = "1[38]\\d{9}";//用正則表達(dá)式定義手機(jī)號(hào)規(guī)則
		boolean flag = str.matches(regex);
		System.out.println("手機(jī)號(hào)是:"+flag);
		input.close();
	}
}

2.分割功能

例:分割年齡段

package zuoye2;
import java.util.Scanner;
public class EXjava {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

        String age = "18-30";//定義年齡范圍
		String regex = "-";
		String[] strArr = age.split(regex);//分割成字符串?dāng)?shù)組
		
		int startage = Integer.parseInt(strArr[0]);
		int endage = Integer.parseInt(strArr[1]);
		
		System.out.print("請(qǐng)輸入年齡:");
		int a = input.nextInt();
		if(a >= startage && a <= endage) {
			System.out.println("Yes");
		}
		else {
			System.out.println("No");
		}
		input.close();
	}
}

3.替換功能

例:將字符串的數(shù)字替換成 *

package zuoye2;
import java.util.Scanner;
public class EXjava {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);

        String s = "12342javawang2345";
		String regex = "\\d";
		String ss = "*";
		//將字符串里面的數(shù)字替換成*
		String result = s.replaceAll(regex, ss);
		System.out.println(result);
		
		input.close();
	}
}

總結(jié) 

到此這篇關(guān)于java正則表達(dá)式用法大全的文章就介紹到這了,更多相關(guān)java正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 關(guān)于MD5算法原理與常用實(shí)現(xiàn)方式

    關(guān)于MD5算法原理與常用實(shí)現(xiàn)方式

    這篇文章主要介紹了關(guān)于MD5算法原理與常用實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 簡(jiǎn)單總結(jié)Java的反射機(jī)制的運(yùn)用

    簡(jiǎn)單總結(jié)Java的反射機(jī)制的運(yùn)用

    這篇文章主要介紹了Java的反射機(jī)制的運(yùn)用,對(duì)一些常用的類作了一些說(shuō)明,需要的朋友可以參考下
    2015-11-11
  • 手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java函數(shù)接口和Lambda表達(dá)式深入分析

    Java函數(shù)接口和Lambda表達(dá)式深入分析

    這篇文章主要介紹了Java函數(shù)接口和Lambda表達(dá)式,函數(shù)接口是一個(gè)具有單個(gè)抽象方法的接口,接口設(shè)計(jì)主要是為了支持Lambda表達(dá)式和方法引用,使得Java能更方便地實(shí)現(xiàn)函數(shù)式編程風(fēng)格,需要的朋友可以參考下
    2025-04-04
  • Springboot整合多數(shù)據(jù)源代碼示例詳解

    Springboot整合多數(shù)據(jù)源代碼示例詳解

    這篇文章主要介紹了Springboot整合多數(shù)據(jù)源代碼示例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringBoot2零基礎(chǔ)到精通之profile功能與自定義starter

    SpringBoot2零基礎(chǔ)到精通之profile功能與自定義starter

    SpringBoot是一種整合Spring技術(shù)棧的方式(或者說(shuō)是框架),同時(shí)也是簡(jiǎn)化Spring的一種快速開發(fā)的腳手架,本篇讓我們一起學(xué)習(xí)profile功能與自定義starter
    2022-03-03
  • java中的序列化解析

    java中的序列化解析

    這篇文章主要介紹了java中的序列化解析,為了將對(duì)象進(jìn)行網(wǎng)絡(luò)傳輸或者是持久化,我們需要將對(duì)象的狀態(tài)信息轉(zhuǎn)換為可以存儲(chǔ)或者傳輸?shù)男问?這個(gè)轉(zhuǎn)換的過(guò)程就叫序列化,需要的朋友可以參考下
    2023-09-09
  • Maven多模塊項(xiàng)目調(diào)試與問(wèn)題排查的完整指南

    Maven多模塊項(xiàng)目調(diào)試與問(wèn)題排查的完整指南

    在現(xiàn)代企業(yè)級(jí)Java開發(fā)中,Maven多模塊項(xiàng)目因其清晰的代碼組織,依賴管理和高效的構(gòu)建流程已成為主流架構(gòu)模式,本文深入剖析多模塊項(xiàng)目的四大核心痛點(diǎn)解決方案,感興趣的小伙伴可以跟隨小編一起了解下
    2025-06-06
  • Springboot+Netty+Websocket實(shí)現(xiàn)消息推送實(shí)例

    Springboot+Netty+Websocket實(shí)現(xiàn)消息推送實(shí)例

    這篇文章主要介紹了Springboot+Netty+Websocket實(shí)現(xiàn)消息推送實(shí)例,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • ResponseBodyAdvice踩坑及解決

    ResponseBodyAdvice踩坑及解決

    這篇文章主要介紹了ResponseBodyAdvice踩坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評(píng)論

平舆县| 兴化市| 安平县| 绥德县| 通辽市| 科技| 沈阳市| 正蓝旗| 新营市| 申扎县| 西盟| 伊宁市| 武邑县| 龙州县| 荔浦县| 保靖县| 依兰县| 眉山市| 浙江省| 仁寿县| 淄博市| 白水县| 铜川市| 连山| 桑植县| 太白县| 当涂县| 朝阳市| 临沭县| 黔西县| 邳州市| 香河县| 五大连池市| 资兴市| 凤冈县| 乌苏市| 河西区| 建平县| 怀柔区| 定陶县| 仁怀市|