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

Java正則表達(dá)式匹配實(shí)例詳解

 更新時(shí)間:2025年09月06日 15:46:37   作者:Tzq@2018  
正則表達(dá)式在Java中用于模式匹配,支持多種元字符,本文通過實(shí)例代碼講解Java正則表達(dá)式匹配的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧

一、正則表達(dá)式匹配

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExtract {
	public static boolean isEmpty(final CharSequence cs) {
		return cs == null || cs.length() == 0;
	}
	private static String getRegexValue(String input, String regex, int group) {
		Pattern pattern = Pattern.compile(regex);
		Matcher matcher = pattern.matcher(input);
		while (matcher.find()) {
			return matcher.group(group);
		}
		return "";
	}
	public static String getTableNameFromCreateTableSql(String sql) throws IOException {
		String checkResult = "";
		// 匹配出 schema.表名
		// String regex = "create\\s*table\\s*(if\\s*not\\s*exists\\s*)?(.*)(\\s\\()";
		// String exceptionTableName = getRegexValue(sql.toLowerCase(), regex, 2);
		// 匹配出 表名
		String regex = "create\\s*table\\s*(if\\s*not\\s*exists\\s*)?(.*\\.)?(.*)(\\s\\()";
		String exceptionTableName = getRegexValue(sql.toLowerCase(), regex, 3);
		if (!isEmpty(exceptionTableName))
			checkResult = exceptionTableName;
		return checkResult;
		// return exceptionTableName;
	}
	public static String getTableNameFromCreateTableSql2(String sql) throws IOException {
		String tableName = "";
		String regex = "create\\s*table\\s*(if\\s*not\\s*exists\\s*)?(.*\\.)?(.*)(\\s\\()";
		Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(sql);
		if (matcher.find()) {
			tableName = matcher.group(3); // 提取匹配的部分
		} else {
			tableName = "";
		}
		return tableName;
	}
	public static void main(String[] args) throws IOException {
		String sql = "";
		sql = "CREATE TABLE tzq_gd.tzq_log_t (";
		String result = getTableNameFromCreateTableSql(sql);
		System.out.println(result);
		String result2 = getTableNameFromCreateTableSql2(sql);
		System.out.println(result2);
	}
}

二、正則表達(dá)式說明

2.1、\w

\w

在正則表達(dá)式中,\w 是一個(gè)元字符,用來匹配任何字母數(shù)字字符及下劃線。具體來說,它等價(jià)于 [a-zA-Z0-9_],這意味著它可以匹配:

  • 任何單個(gè)字母(大寫或小寫),即 azAZ
  • 任何單個(gè)數(shù)字,即 09
  • 下劃線 _

例如,在字符串 “Hello123” 中,\w 可以匹配每一個(gè)字符 “H”、“e”、“l”、“l”、“o”、“1”、“2” 和 “3”。

2.2、*

*

在正則表達(dá)式中,星號(hào) * 是一個(gè)量詞,它表示其前一個(gè)字符(或字符組)可以出現(xiàn)任意次,包括0次。具體來說,如果在正則表達(dá)式中某個(gè)字符后面加上星號(hào) *,那么這個(gè)字符可以不出現(xiàn),或者出現(xiàn)一次,或者多次。

例如:

  • a* 匹配任何包含零個(gè)或多個(gè) ‘a’ 的字符串,如:"" (空字符串), "a", "aa", "aaa" 等。
  • ba*n 匹配以 ‘b’ 開始,后跟零個(gè)或多個(gè) ‘a’,最后是一個(gè) ‘n’ 的字符串,如:"bn", "ban", "baan", "baaan" 等。

2.3、?

?

在正則表達(dá)式中,問號(hào) ? 也是一個(gè)量詞,它表示其前一個(gè)字符(或字符組)可以出現(xiàn)0次或1次。換句話說,問號(hào) ? 使得前一個(gè)字符變?yōu)榭蛇x的。

具體來說:

  • a? 匹配包含零個(gè)或一個(gè) ‘a’ 的字符串,如:"" (空字符串), "a"。
  • colou?r 匹配 “color” 和 “colour”。

舉一些例子:

  • a?b 可以匹配 "b""ab"。
  • http://www\.example\.com/?(index\.html)? 可以匹配 http://www.example.com/http://www.example.com/index.html。

2.4、.

.

在正則表達(dá)式中,“.” 是一個(gè)特殊字符(元字符),它的意思是:

匹配除換行符以外的任意單個(gè)字符。

舉個(gè)例子來說明:

正則表達(dá)式:a.c

這個(gè)正則表達(dá)式表示:

  • 匹配以 a 開頭,
  • 中間有一個(gè)任意字符(但不能是換行符),
  • c 結(jié)尾 的三個(gè)字符的字符串。
匹配結(jié)果:
  • abc ?
  • a2c ?
  • a c ?(中間是空格)
  • ac ?(因?yàn)橹挥袃蓚€(gè)字符,中間沒有字符)
  • a c ?(中間是換行符,. 不匹配換行符)

補(bǔ)充說明:

  • 如果你希望 . 能匹配包括換行符在內(nèi)的所有字符,通常需要使用“單行模式”(也叫“點(diǎn)號(hào)匹配所有模式”),具體語法因語言而異。例如:
    • 在 Python 中使用 re.DOTALL 標(biāo)志;
    • 在 JavaScript 中使用 s 修飾符(如 /a.c/s);
    • 在 Java 中使用 Pattern.DOTALL

總結(jié):

字符含義
.匹配任意一個(gè)字符(除換行符 `
` 以外)

2.5、()

()

1. 單個(gè)括號(hào)()的作用(分組)

括號(hào) () 在正則表達(dá)式中主要有以下幾個(gè)用途:

a.分組表達(dá)式

將多個(gè)字符或子表達(dá)式組合為一個(gè)整體,例如:

(ab)+

這個(gè)表達(dá)式匹配的是 ab 重復(fù)一次或多次,比如 ab, abab, ababab 等。

b.捕獲分組

括號(hào)可以捕獲匹配的內(nèi)容,并可以通過反向引用(如 \1, \2 等)來引用這些內(nèi)容。

例如:

(\d{3})-(\d{3}-\d{4})

這個(gè)正則可以匹配電話號(hào)碼如 123-456-7890,其中:

  • (\d{3}) 捕獲前三個(gè)數(shù)字;
  • (\d{3}-\d{4}) 捕獲后面的數(shù)字部分;
  • \1\2 可以引用這兩個(gè)分組的內(nèi)容。

2. “雙括號(hào)”(())的含義(即嵌套括號(hào))

如果你看到的是 雙括號(hào) (()),這表示的是嵌套的分組,比如:

((a)(b))

這個(gè)表達(dá)式匹配的是 ab,并將其分為兩個(gè)分組:

  • 第一個(gè)括號(hào) ((a)(b)) 是整個(gè)分組;
  • 第二個(gè)括號(hào) (a) 是第一個(gè)分組內(nèi)的子分組;
  • 第三個(gè)括號(hào) (b) 也是第一個(gè)分組內(nèi)的另一個(gè)子分組。

這種結(jié)構(gòu)在反向引用中可能會(huì)用到,例如:

(\d{3})-(\d{3})-(\d{4})

可以寫成嵌套形式:

((\d{3})-(\d{3}))-(\d{4})

3. 非捕獲分組((?:...))

如果你只是想分組而不捕獲內(nèi)容(即不想保存匹配的內(nèi)容),可以使用非捕獲分組

(?:abc)+

這個(gè)表達(dá)式匹配的是 abc 重復(fù)一次或多次,但不會(huì)保存每個(gè)匹配的內(nèi)容。

總結(jié)

表達(dá)式說明
()捕獲分組,同時(shí)分組和保存匹配內(nèi)容
(())嵌套分組,多個(gè)分組層級(jí)
(?:...)非捕獲分組,僅分組不保存

如果你看到的是 () 但不是嵌套的情況,那它就是普通的分組和捕獲操作。

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

相關(guān)文章

  • 基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能

    基于HTML5+js+Java實(shí)現(xiàn)單文件文件上傳到服務(wù)器功能

    應(yīng)公司要求,在HTML5頁(yè)面上實(shí)現(xiàn)上傳文件到服務(wù)器功能,對(duì)于我這樣的菜鳥,真是把我難住了,最后還是請(qǐng)教大神搞定的,下面小編把例子分享到腳本之家平臺(tái),供大家參考
    2017-08-08
  • Java類加載異常:java.lang.ClassNotFoundException解決方法

    Java類加載異常:java.lang.ClassNotFoundException解決方法

    這篇文章主要給大家介紹了關(guān)于Java類加載異常:java.lang.ClassNotFoundException的解決方法,異常是Java編程語言中的一個(gè)標(biāo)準(zhǔn)異常類,它繼承自類,當(dāng)在運(yùn)行時(shí)嘗試加載類時(shí),如果系統(tǒng)找不到指定的類文件就會(huì)拋出該異常,需要的朋友可以參考下
    2023-11-11
  • Redis哨兵(sentinel)用法解讀

    Redis哨兵(sentinel)用法解讀

    本文介紹了Redis Sentinel的故障轉(zhuǎn)移機(jī)制,包括監(jiān)控主從庫(kù)狀態(tài)、消息通知、故障轉(zhuǎn)移過程、配置中心等功能,以及具體配置和操作步驟
    2026-04-04
  • JPA之EntityManager踩坑及解決:更改PersistenceContext

    JPA之EntityManager踩坑及解決:更改PersistenceContext

    這篇文章主要介紹了JPA之EntityManager踩坑及解決:更改PersistenceContext方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)

    SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn)

    本文主要介紹了SpringBoot+TestNG單元測(cè)試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Vue計(jì)算屬性computed和監(jiān)聽屬性watch的使用解讀

    Vue計(jì)算屬性computed和監(jiān)聽屬性watch的使用解讀

    本文介紹了Vue.js中的計(jì)算屬性(computed)和監(jiān)聽屬性(watch)的區(qū)別和使用場(chǎng)景,計(jì)算屬性是基于依賴緩存的,只有在相關(guān)依賴發(fā)生改變時(shí)才會(huì)重新求值,適合用于簡(jiǎn)單的數(shù)據(jù)處理和計(jì)算,而監(jiān)聽屬性則用于監(jiān)聽數(shù)據(jù)變化時(shí)執(zhí)行異步或開銷較大的操作,適合用于處理復(fù)雜的數(shù)據(jù)邏輯
    2025-12-12
  • SpringCloud Eureka服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)過程

    SpringCloud Eureka服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)過程

    這篇文章主要介紹了SpringCloud Eureka服務(wù)發(fā)現(xiàn)實(shí)現(xiàn)過程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • JVM常見垃圾收集器學(xué)習(xí)指南

    JVM常見垃圾收集器學(xué)習(xí)指南

    這篇文章主要為大家介紹了JVM常見垃圾收集器學(xué)習(xí)指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • SpringBoot項(xiàng)目找不到接口報(bào)404錯(cuò)誤的解決辦法

    SpringBoot項(xiàng)目找不到接口報(bào)404錯(cuò)誤的解決辦法

    寫了一個(gè)簡(jiǎn)單的springboot項(xiàng)目,在啟動(dòng)的時(shí)候idea未報(bào)錯(cuò),瀏覽器訪問接口時(shí)報(bào)404的錯(cuò)誤,所以本文給大家介紹了SpringBoot項(xiàng)目找不到接口報(bào)404錯(cuò)誤的解決辦法,文中有相關(guān)的圖文供大家參考,需要的朋友可以參考下
    2024-12-12
  • java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn)

    這篇文章主要介紹了java.lang.NullPointerException 如何處理空指針異常的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12

最新評(píng)論

蒙山县| 肥东县| 马鞍山市| 太仓市| 虞城县| 永胜县| 盱眙县| 永安市| 柳州市| 罗甸县| 普洱| 武义县| 武城县| 洪雅县| 金昌市| 武川县| 额济纳旗| 西乌珠穆沁旗| 同江市| 峨边| 赫章县| 武威市| 扎囊县| 寻甸| 兴城市| 全南县| 汕尾市| 宜丰县| 密山市| 佛坪县| 南江县| 漠河县| 江口县| 安庆市| 石屏县| 资溪县| 青河县| 皮山县| 伊金霍洛旗| 和静县| 徐水县|