欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:正則表達式超詳細講解

N11鏈接綜合2025-08-22290

柚子快報激活碼778899分享:正則表達式超詳細講解

http://yzkb.51969.com/

歡迎并且感謝大家指出我的問題,由于本人水平有限,有些內容寫的不是很全面,只是把比較實用的東西給寫下來,還有對一些常用的正則表達式進行收集整理,如果有寫的不對的地方,還希望大家多多指教!謝謝大家!殺

????????在我第一次接觸到正則表達式的時候我就很納悶,到底誰是誰研究出這么多符號的組合,就那么一個字符規(guī)則校驗就足以使那么多程序員為之抓狂。我查閱了很多資料和參考文獻,將正則表達式的很多知識總結到了一起,廢話不多說直接開始。

什么是正則表達式?

? ? ? ? 正則表達式是一組由字母和符號組成的特殊文本,它可以用來從文本中找出滿足你想要的格式的句子。通俗的講就是校驗字符串是否滿足規(guī)則或者在文本查找滿足要求的內容。我在這里給大家舉個簡單的例子。

? ? ? ? 如果我需要對一組qq號(字符串)進行檢驗,例如,要求qq號必須是6位到20位之內的,不能以0開頭,還必須全是數(shù)字。按照正常來說,我需要寫一個比較復雜的檢測方法。像下面這個是不是看起來比較麻煩。

public static boolean checkQQ(String qq) {

//規(guī)則:6位及20位之內,0不能在開頭,必須全部是數(shù)字

int len = qq.length();

if (len < 6 || len > 20) {

return false;

}

//0不能在開頭

if (qq.startsWith("0")) {

return false;

}

//必須全部是數(shù)字

for (int i = 0; i < qq.length(); i++) {

char c = qq.charAt(i);

if (c < '0' || c > '9') {

return false;

}

}

return true;

}

? ? ? ? 但是如果我們要是使用正則表達式的話只需要一行代碼即可,看起來是不是超級哇塞,超級簡潔。

qq.matches("[1 - 9]\\d{5,19}");

????????在Java中可以使用matches方法:String類的matches方法用于嘗試將整個字符串與給定的正則表達式進行匹配,如果整個字符串匹配該正則表達式則返回true,否則返回false。?

元字符

元字符:即為有特定含義的字符,常見的元字符如下

常用的元字符(只能匹配一個字符)

代碼說明.匹配除換行符以外的任意字符\w匹配字母或數(shù)字或下劃線或漢字\s匹配任意的空白符\d匹配數(shù)字\b匹配單詞的開始或結束^匹配字符串的開始(在集合字符里[^a]表示非(不匹配)的意思$匹配字符串的結束

1. 點號(.)

????????點號是一個非常常用的元字符,它可以匹配除換行符之外的任意單個字符。例如,正則表達式?a.c?可以匹配 "abc"、"a1c"、"a@c" 等字符串。這是因為點號在這里代表了任意一個非換行的字符,只要滿足 "a" 開頭,"c" 結尾,中間是任意單個字符的模式,都能被匹配。需要注意的是,不同的編程語言或工具可能對換行符的定義有所不同,有些可能會將回車符(\r)、換行符(\n)或它們的組合都視為換行情況。

2. 星號(*)

????????星號用于表示匹配前面的元素零次或多次。例如,正則表達式?ab*c?可以匹配多種情況。當?b?出現(xiàn)零次時,它可以匹配 "ac";當?b?出現(xiàn)一次時,能匹配 "abc";當?b?出現(xiàn)多次時,像 "abbbc" 也能被成功匹配。這是因為星號允許前面的?b?字符出現(xiàn)任意次數(shù),包括零次。

3. 加號(+)

????????加號與星號類似,但它要求前面的元素至少出現(xiàn)一次。以正則表達式?ab+c?為例,它可以匹配 "abc"、"abbbc" 等字符串,但不能匹配 "ac",因為?b?至少要出現(xiàn)一次才能滿足該正則表達式的模式。

4. 問號(?)

????????問號表示匹配前面的元素零次或一次。例如,正則表達式?ab?c?可以匹配 "ac"(此時?b?出現(xiàn)零次)和 "abc"(b?出現(xiàn)一次)。問號常用于表示某個字符或一組字符是可選的情況。

5. 花括號({n}、{n,}、{n,m})

????????花括號用于精確控制前面元素的匹配次數(shù),有三種常見的用法:

{n}:精確匹配前面的元素?n?次。例如,a{3}?只能匹配 "aaa",如果文本中是 "aa" 或 "aaaa" 則無法匹配。{n,}:匹配前面的元素至少?n?次。例如,a{2,}?可以匹配 "aa"、"aaa"、"aaaa" 等,只要?a?的連續(xù)出現(xiàn)次數(shù)不少于 2 次即可。{n,m}:匹配前面的元素?n?到?m?次。例如,a{2,4}?可以匹配 "aa"、"aaa"、"aaaa",但不能匹配 "a" 或 "aaaaa"。

6. 方括號([ ])

方括號用于定義一個字符集合,匹配方括號內的任意一個字符。例如,[abc]?可以匹配 "a"、"b" 或 "c"。方括號內還可以使用連字符表示字符范圍,如?[a-z]?可以匹配任意小寫字母,[0-9]?可以匹配任意數(shù)字。此外,方括號內的字符順序不影響匹配結果,[abc]?和?[cba]?的匹配效果是一樣的。

7. 脫字符(^)

脫字符在正則表達式中有兩種常見用法:

在方括號內使用時,表示取反,即匹配不在方括號內的任意字符。例如,[^abc]?可以匹配除 "a"、"b"、"c" 之外的任意字符,像 "d"、"1"、"@" 等都能被匹配。在正則表達式開頭使用時,表示匹配字符串的開頭。例如,^abc?表示只有以 "abc" 開頭的字符串才能被匹配,對于 "xyzabc" 這樣的字符串則無法匹配。

8. 美元符號($)

美元符號用于表示匹配字符串的結尾。例如,abc$?表示只有以 "abc" 結尾的字符串才能被匹配,像 "testabc" 可以匹配,但 "abcdef" 則無法匹配。

^:表示匹配字符串的開頭,確保郵箱地址從這里開始,避免匹配到包含郵箱地址但不是以其開頭的字符串。[a-zA-Z0-9._%+-]+:匹配郵箱用戶名部分。方括號內定義了允許的字符集合,包括字母(大小寫均可)、數(shù)字、點號、下劃線、百分號、加號和減號。+?表示這些字符至少出現(xiàn)一次,因為郵箱用戶名不能為空。@:匹配郵箱地址中的 "@" 符號,這是郵箱地址的關鍵分隔符。[a-zA-Z0-9.-]+:匹配域名部分,允許包含字母、數(shù)字、點號和減號。同樣,+?表示這些字符至少出現(xiàn)一次。\.:匹配域名中的點號,由于點號是元字符,需要使用反斜杠進行轉義。[a-zA-Z]{2,}:匹配頂級域名,由至少兩個字母組成。常見的頂級域名如 ".com"、".cn"、".org" 等都滿足這個規(guī)則。$:表示匹配字符串的結尾,確保郵箱地址到這里結束,避免匹配到包含郵箱地址但后面還有其他多余字符的情況。

轉義字符

????????當我們需要匹配元字符本身時,就需要使用反斜杠(\)進行轉義。因為元字符在正則表達式中有特殊含義,直接使用會被解釋為相應的模式匹配規(guī)則。例如,要匹配點號(.),就需要使用?\.;要匹配反斜杠本身,需要使用?\\。在不同的編程語言中,由于字符串本身也可能使用反斜杠進行轉義,所以有時需要使用雙反斜杠來表示一個真正的反斜杠。例如,在 Python 中,要匹配一個點號,正則表達式字符串需要寫成?r'\.'(使用原始字符串避免 Python 字符串本身的轉義)。

常用的反義字符(只能匹配一個字符)

代碼/語法說明\W匹配任意不是字母,數(shù)字,下劃線,漢字的字符\S匹配任意不是空白符的字符\D匹配任意非數(shù)字的字符\B匹配不是單詞開頭或結束的位置[^x]匹配除了x以外的任意字符[^aeiou]匹配除了aeiou這幾個字母以外的任意字符

字符類

字符類(只匹配一個字符)

代碼說明[abc]只能是 a, b, 或 c[^abc]除了 a, b, c 之外的任何字符[a-zA-Z]a 到 z A 到 Z,包括(范圍)? ? ? ?[a-d[m-p]]a 到 d,或 m 到 p[a-z&&[def]]a-z 和 def 的交集。為:d, e, f[a-z&&[^bc]]a-z 和非 bc 的交集。(等同于 [ad-z])[a-z&&[^m-p]]a 到 z 和除了 m 到 p 的交集。(等同于 [a-lq-z])

限定字符

常用的限定字符如下

常用的限定符

代碼/語法說明*重復零次或更多次+重復一次或更多次?重復零次或一次{n}重復n次{n,}重復n次或更多次{n,m}重復n到m次

字符分枝

字符分枝多用于滿足不同情況的選擇,用“|”將不同的條件分割開來,比如有些固定電話區(qū)號有三位,有些有四位,這個時候可以采用字符分枝

例如:\d{3}-\d{8}|\d{4}-\d{8} ?可以匹配兩種不同長度區(qū)號的固定電話

下邊的IP地址正則表達式也有用到字符分枝

字符分組

字符分組多用于將多個字符重復,主要通過使用小括號()來進行分組

形如:(\d\w){3} 重復匹配3次(\d\w)

常用于表示IP地址 ? 形如: ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$

解析:先把IP地址分為兩部分一部分是123.123.123. 另一部分是123,又因Ip最大值為255,所以先使用分組,然后在組里邊再進行選擇,組里也有三部分,0-199,200-249,250-255,分別和上述的表達是對應,最后還要注意分組之后還要加上一個.,因為是元字符所以要轉義故加上\. 然后再把這部分整體看做是一個組,重復三次,再加上僅有數(shù)字的一組也就是不帶\.的那一組即可完成IP地址的校驗

懶惰匹配和貪婪匹配

貪婪匹配:正則表達式中包含重復的限定符時,通常的行為是匹配盡可能多的字符。

懶惰匹配,有時候需要匹配盡可能少的字符。

????????在正則表達式中,默認的匹配模式是貪婪匹配,即盡可能多地匹配字符。例如,正則表達式?a.*b?對于字符串 "aabab" 會匹配整個字符串 "aabab",因為?.*?會盡可能多地匹配字符,直到遇到最后一個 "b"。

????????而非貪婪匹配則是盡可能少地匹配字符,通過在量詞后面加上問號???來實現(xiàn)。例如,正則表達式?a.*?b?對于字符串 "aabab" 會匹配 "aab",因為?.*??會盡可能少地匹配字符,一旦遇到第一個 "b" 就停止匹配。

八、后向引用

后向引用用于重復搜索前面某個分組匹配的文本。

使用小括號指定一個子表達式后,匹配這個子表達式的文本(也就是此分組捕獲的內容)可以在表達式或其它程序中作進一步的處理。默認情況下,每個分組會自動擁有一個組號,規(guī)則是:從左向右,以分組的左括號為標志,第一個出現(xiàn)的分組的組號為1,第二個為2,以此類推

示例:\b(\w+)\b\s+\1\b可以用來匹配重復的單詞,像go go, 或者kitty kitty。

這個表達式首先是一個單詞,也就是單詞開始處和結束處之間的多于一個的字母或數(shù)字(\b(\w+)\b),這個單詞會被捕獲到編號為1的分組中,然后是1個或幾個空白符(\s+),最后是分組1中捕獲的內容(也就是前面匹配的那個單詞)(\1)。

你也可以自己指定子表達式的組名。要指定一個子表達式的組名,請使用這樣的語法:(?\w+)(或者把尖括號換成'也行:(?'Word'\w+)),這樣就把\w+的組名指定為Word了。要反向引用這個分組捕獲的內容,你可以使用\k,所以上一個例子也可以寫成這樣:\b(?\w+)\b\s+\k\b

零寬斷言

????????有時候需要查找某些匹配之前或之后的東西,這個時候就需要用到們像\b,^,$那樣用于指定一個位置,這個位置應該滿足一定的條件(即斷言),因此它們也被稱為零寬斷言

????????零寬斷言是一種特殊的正則表達式語法,它用于在不消耗字符的情況下進行位置匹配。也就是說,零寬斷言只檢查某個位置是否滿足特定的條件,而不會將匹配到的字符作為結果的一部分。常見的零寬斷言有以下幾種:

1. 正向先行斷言((? = ...))

????????正向先行斷言用于檢查某個位置后面的字符是否滿足特定的模式。例如,正則表達式?\w+(?=\d)?可以匹配后面緊跟著一個數(shù)字的單詞字符序列。對于字符串 "abc123",它會匹配 "abc",因為 "abc" 后面緊跟著數(shù)字 "1"。

2. 負向先行斷言((?!...))

????????負向先行斷言用于檢查某個位置后面的字符是否不滿足特定的模式。例如,正則表達式?\w+(?!\d)?可以匹配后面不緊跟著數(shù)字的單詞字符序列。對于字符串 "abc def123",它會匹配 "abc" 和 "def",因為 "abc" 后面不是數(shù)字,而 "def" 雖然后面跟著數(shù)字,但在匹配 "def" 時檢查到后面不是數(shù)字的條件是滿足的。

3. 正向后行斷言((?<=...))

????????正向后行斷言用于檢查某個位置前面的字符是否滿足特定的模式。例如,正則表達式?(?<=\$)\d+?可以匹配前面緊跟著美元符號的數(shù)字序列。對于字符串 "$123",它會匹配 "123"。

4. 負向后行斷言((?

????????負向后行斷言用于檢查某個位置前面的字符是否不滿足特定的模式。例如,正則表達式?(?

實踐

Java 中通過?java.util.regex?包來支持正則表達式的使用。以下是一些示例:

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class RegexExample {

public static void main(String[] args) {

// 匹配手機號碼

String pattern = "^1[3-9]\\d{9}$";

String phone = "13800138000";

Pattern r = Pattern.compile(pattern);

Matcher m = r.matcher(phone);

if (m.matches()) {

System.out.println("手機號碼格式正確");

} else {

System.out.println("手機號碼格式錯誤");

}

// 查找字符串中的單詞

String text = "Hello, World!";

Pattern wordPattern = Pattern.compile("\\w+");

Matcher wordMatcher = wordPattern.matcher(text);

while (wordMatcher.find()) {

System.out.println(wordMatcher.group());

}

}

}

?

柚子快報激活碼778899分享:正則表達式超詳細講解

http://yzkb.51969.com/

本文內容根據(jù)網絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/2027240607.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄