1.正則運算式介紹(regular Expresssion)
定義:描述一個語法規則,通過這個規則可以匹配一類字串,
用途:大部分編程語言,資料庫,文本編輯器,開發環境
普通字符:
字母,數字,漢字,下劃線,以及沒有特殊定義的標點符號,都是普通字符,
運算式中的普通字符,在匹配一個字串的時候,匹配與之相同的一個字符
簡單的轉義字符:
\n,\t,\\:換行,制表,\本身
\^,\$\,\(,\),\{,\},\?,\+,\*,\|,\[,\]:代表這些字符本身
2.標準字符集合
能夠與‘多種字符’匹配運算式
注意區分大小寫,大寫是相反的意思
\d:任意數字,0-9任意一個
\w:任意字母,數字,下劃線,0-9,A-Z,a-z,_中任意一個
\s:包括空格,制表符,換行符等空白字符的其中任意一個
.:小數點可以匹配任意一個字符(除換行符)
注:如想匹配包含換行符在內所有字符,一般用[\s\S]
3.自定義字符集合:
[]方括號匹配方式:能夠匹配方括號中任意一個字符
[ab5@]:匹配a,b,5,@中任意一個
[^abc]:匹配a,b,c之外的任意一個字符
[f-k]:匹配f-k之間的任意一個字母
[^A-F0-3]:匹配A-F,0-3之外任意一個字符
注:正則運算式的特殊符號,被包含到中括號中,則失去特殊意義,除了^,-之外
標準字符集合,除小數點外,如果被包含于中括號,自定義字符集合將包含該集合,
比如:[\d.\-+]將匹配:數字、小數點、+、-
4.量詞
修飾匹配次數的特殊符號
{n}:運算式重復n次
{m,n}:運算式至少重復m次,最多重復n次
{m,}:運算式至少重復m次
?:匹配運算式0次或者1次,相當于{0,1}
+:運算式至少出現1次,相當于{1,}
*:運算式不出現或出現任意次,相當于{0,}
匹配次數中的貪婪模式(匹配字符越多越好,默認)
匹配次數中的非貪婪模式(匹配字符越少越好,修飾匹配次數的特殊符號后再加上一個?號)
5.字符邊界
本組標記匹配的不是字符而是位置,符合某種條件的位置(零寬匹配)
^:與字串開始的地方匹配
$:與字串結束的地方匹配
\b:匹配一個單詞邊界(前后字符不全是\w)
6.匹配模式
1.IGNORECASE:忽略大小寫模式
匹配時忽略大小寫
默認情況下,正則運算式是要區分大小寫的
2.SIGNLELINE:單行模式
整個文本看作一行字串,只有一個開頭,一個結尾
使用“.”可以匹配包含換行符(\n)在內的任意字符
3.MULTILINE:多行模式
每行都是一個字串,都有開頭和結尾
在指定了MULTILINE之后,如果需要僅匹配字串開始和結束位置,可以使用\A和\Z
7.分支結構,捕獲,反向參考
1.分支結構 "|":左右兩邊運算式之間為“或”關系,匹配左邊或者右邊
2.捕獲組 "()":
1.在被修飾匹配次數的時候,括號中的運算式可以作為整體被修飾
2.取匹配結果的時候,括號中的運算式匹配到的內容可以被單獨得到
3.每一對括號會分配一個編號,使用()的捕獲根據左括號的順序從1開始自動編號,捕獲元素編號為0的第一個捕獲是由整個正則運算式模式匹配的文本
3.非捕獲組 "(?:Expression)":
一些運算式中,不得不使用(),但又不需要保存()中子運算式匹配的內容,這時可以用非捕獲組來抵消使用()帶來的副作用,
4.反向參考(\nnn)
每一對()會分配一個編號,使用 () 的捕獲根據左括號的順序從 1 開始自動編號,
通過反向參考,可以對分組已捕獲的字串進行參考,8.預搜索(零寬斷言,環視)
1.只進行子運算式的匹配,匹配內容不計入最終的匹配結果,是零寬度 2.這個位置應該符合某個條件,判斷當前位置的前后字符,是否符合指定的條件,但不匹配前后的字符,是對位置的匹配, 3.正則運算式匹配程序中,如果子運算式匹配到的是字符內容,而非位置,并被保存到最終的匹配結果中, 那么就認為這個子運算式是占有字符的;如果子運算式匹配的僅僅是位置,或者匹配的內容并不保存到最終的匹配結果中, 那么就認為這個子運算式是零寬度的,占有字符還是零寬度,是針對匹配的內容是否保存到最終的匹配結果中而言的, 語法: 1.(?=exp):斷言自身出現的位置的后面能匹配運算式exp 2.(?<=exp):斷言自身出現的位置的前面能匹配運算式exp 3.(?!exp):斷言此位置的后面不能匹配運算式exp 4.(?<!exp):斷言此位置的前面不能匹配運算式exp
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103696.html
標籤:Java
上一篇:C++虛函式表原理淺析
