正則表達式(Regular Expression)基本概念及理解正則表達式(RegularExpression)正則表達式(regularexpression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。正則表達式是由普通字符(例如字符a到z)以及特殊
正則表達式(regular expression)描述了一種字符串匹配的模式(pattern),可以用來檢查一個串是否含有某種子串、將匹配的子串替換或者從某個串中取出符合某個條件的子串等。
構造正則表達式的方法和創建數學表達式的方法一樣。也就是用多種元字符與運算符可以將小的表達式結合在一起來創建更大的表達式。正則表達式的組件可以是單個的字符、字符集合、字符范圍、字符間的選擇或者所有這些組件的任意組合。
正則表達式是由普通字符(例如字符 a 到 z)以及特殊字符(稱為”元字符”)組成的文字模式。模式描述在搜索文本時要匹配的一個或多個字符串。正則表達式作為一個模板,將某個字符模式與所搜索的字符串進行匹配。
文本的復雜處理
一種強大而靈活的文本處理工具
大部分編程語言、數據庫、文本編輯器、開發環境都支持正則表達式
正如名字一樣時描述了一個規則,通過這個規則可以匹配一類字符串
學習正則表達式很大程度上就是學習正則表達式的語法規則
分析所要匹配的數據,寫出測試用的典型數據
在工具軟件中進行匹配測試
在程序中調用通過測試的正則表達式
字母、數字、漢字、下劃線、以及沒有特殊定義的標點符號,都是“普通字符”。表達式中的普通字符,在匹配一個字符串的時候,匹配與之相同的一個字符。
能夠與‘多種字符’匹配的表達式
注意區分大小寫,大寫是相反的意思
\d :任意一個數字,0-9中的任意一個 \w :任意一個字母或數字或下劃線,也就是A-Z,a-z,0-9,_,中任意一個 \s :包括空格、制表符、換行符等空白字符的其中任意一個 . :小數點可以匹配任意一個字符(除了換行符),如果要匹配包括“\n”在內的所有字符,一般用[\s\S]方括號匹配方式,能夠匹配方括號中任意一個字符
[ab5@] :匹配”a”,“b”,“5″或”@” [^abc] :匹配非”a”,”b,”c”之外的任意一個字符 [f-k] :匹配”f”-“k”之間的任意一個字母 [^a-f0-3] :匹配”a”-“f”,“0”-“3″之外的任何一個字符正則表達式的特殊符號,被包含到中括號中,則失去了特殊意義,除了^,-之外
標準字符集合,除小數點外,如果被包含于中括號,自定義字符集合將包含該集合。如
[\d.\-+]將匹配:數字、小數點、-、+
修飾匹配次數的特殊符號,修飾的是前一個表達式
{n} :表達式重復n次 {m,n} :表達式至少重組m次,最多重復n次 {m,} :表達式至少重復m次 ? :匹配表達式0次或1次,相當于{0,1} + :表達式至少出現一次,相當于{1,} * :表達式出現或者出現多次,相當于{0,}匹配次數的貪婪模式:匹配的字符越多越好(默認)
匹配次數的非貪婪模式:匹配的字符越少越好,修飾匹配次數的特殊符號后再加上一個”?”
\d\d{6}其中只是對第二個的\d匹配6次,總共匹配7次
非貪婪:
匹配的是滿足條件的位置,而不是字符
^ :字符串開頭 $ :字符串結尾開始匹配 \b :匹配一個單詞的邊界,前面的字符和后面的字符不全是\w(字母數字下劃線)IGNORECASE 忽略大小寫模式
匹配時忽略大小寫,默認情況下,正則表達式是要區分大小寫的
SINGLELINE 單行模式
整個文本看作一個字符串,只有一個開頭,一個結尾,是小數點”.”可以匹配包含換行符(\n)在內的任意字符
MULTILINE 多行模式
每一行都是一個字符串,都有開頭和結尾,在指定了MULTULINE之后,如果需要僅匹配字符串開始的和結束的位置,可以使用\A和\Z
反向引用(\nnn):每一對()會分配一個編號,使用()的捕捉根據左括號的順序從1開始自動編號,通過反向引用,可以對分組已捕獲的字符串進行引用。引用前面已捕獲內容從第一個括號開始一組括號為一個(nnn表示個數)默認為\0
斷言后匹配的本身不計入匹配的字符串
例:電話號碼驗證:
郵箱驗證:
常用正則表達式列表:
將正則表達式變為java對象
public class RegTest01 { public static void main(String[] args) { //在:asdasda123wwe12323中,是否符合指定的正則表達式\w+ //創建表達式對象 Pattern pattern = pattern.compile("\\w+"); //創建Matcher對象:目標字符串 Matcher matcher = pattern.matcher("asdasda123wwe12323**asd"); System.out.println(matcher.matches()); boolean b = matcher.find();//該方法掃描輸入的序列,查找與該模式匹配的下一個子序列 System.out.println(b); System.out.println(matcher.find()); System.out.println(matcher.find()); System.out.println(matcher.find()); }}
是否還在為Ide開發工具頻繁失效而煩惱,來吧關注以下公眾號獲取最新激活方式。親測可用!
【正版授權,激活自己賬號】:Jetbrains全家桶Ide使用,1年售后保障,每天僅需1毛
【官方授權 正版激活】:官方授權 正版激活 自己使用,支持Jetbrains家族下所有IDE…
輸出:
輸出匹配得到的字符串:
while(matcher.find()) { System.out.println(matcher.group()); System.out.println(matcher.group(0));//group(),group(0)匹配整個表達式的子字符串 }
測試正則表達式的分組處理:
/* * 測試正則表達式的分組處理 * */public class RegTest02 { public static void main(String[] args) { Pattern pattern = Pattern.compile("([a-z]+)([0-9]+)"); Matcher matcher = pattern.matcher("asda123***asdada22*sda"); while (matcher.find()){ System.out.println(matcher.group());//匹配([a-z]+)([0-9]+) System.out.println(matcher.group(1));//即匹配([a-z]+) System.out.println(matcher.group(2));//匹配([0-9]+) } }}
/* * 正則表達式在java中常用方法 * */public class RegTest03 { public static void main(String[] args) { Pattern pattern = Pattern.compile("[0-9]"); Matcher matcher = pattern.matcher("asda123***asdada22*sda"); //將數字替換 String s = matcher.replaceAll("&"); System.out.println(s); //使用正則表達式以數字進行分割 String s1 = "asda123***asdada22*sda"; String[] strings = s1.split("\\d+"); System.out.println(Arrays.toString(strings)); }}
輸出:
/* * * 網絡爬蟲取鏈接 * */public class WebSpiderTest { public static String getUrlContent(String urlStr){ StringBuilder sb = new StringBuilder(); try { URL url = new URL(urlStr); BufferedReader bf = new BufferedReader(new InputStreamReader(url.openStream())); String temp = ""; while ((temp = bf.readLine()) != null){ sb.append(temp); } bf.close(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return sb.toString(); } public static void main(String[] args) { String regStr = getUrlContent("http://www.baidu.com"); Pattern pattern = Pattern.compile("<a[\\s\\S]+?</a>");//取得超鏈接整個內容 Pattern pattern1 = Pattern.compile("(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?");//取得超鏈接整個內容 Matcher matcher = pattern1.matcher(regStr); while (matcher.find()){ System.out.println(matcher.group()); } }}
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...
2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...
:喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...
廣州期貨交易所開戶有哪些條件?1、連續5個交易日可用資金大于10萬,并通過相關的知識測試;2、有50個交易日記錄(當天有開倉或者平倉才算一個交易日記錄,如果只有持倉是不算的);3、具有能源中心交易編碼、金融交易編碼、特殊品種或期權交易權限。廣州期貨交易所發展定位是什么?廣州期貨交易所定位于創新型期貨交易所,其設立將為粵港澳大灣區內企業、“一帶一路”沿線企業提供更多風險管理工...
黃金螺線是什么意思?黃金螺線有什么用處?小編整理了以下相關內容,一起來看看吧!黃金矩形可以用來構造黃金螺線。任何黃金矩形,如圖1,那可以劃分成一個正方形和一個小的黃金矩形,如圖2所示。這個過程理論上可以無限延續。我們這樣做出的正方形明顯向內旋轉,它們被標示成A、B、C、D、E、F和G。本身就呈黃金比例的兩條虛線,是黃金矩形的對角線,它們的交點精確指出了旋轉正方形的理論中心。從靠近這個中心的地方,我...
(相關資料圖)1、一直被人們喻為愛情的象征,相傳他是一個頑皮的、身上長著翅膀的小神,他的箭一旦插入青年男女的心上,便會使他們深深相愛。2、在古希臘神話中,他是愛與美的女神(阿芙羅狄忒)Aphrodite與戰神(阿瑞斯)Ares的小兒子Eros。3、在羅馬神話中,他叫丘比特(Cupid),他的母親是維納斯(即阿芙羅狄忒)。以上就是【愛情之箭動畫版,愛情之箭】相關內容。...