正则表达式总结(待续)
生活随笔
收集整理的這篇文章主要介紹了
正则表达式总结(待续)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、元字符
. ? 可以匹配任何字母字符和數字,包括標點符號和空白符等
\d 匹配數字 。與[0-9]等價
\D 非數字
\w 匹配英文字母字符、數字和下劃線。與[A-Za-z0-9_]等價
\W 用于匹配\w不能匹配的字符,相反的字符
\s 匹配任何空白字符
\S 匹配任何非空白字符
\t 匹配制表符
\n 換行符
二、字符類
字符類是一些字符的無序集合,正則表達式模式可以從這個組合中挑選出一個字符類完成匹配。當字符類不帶有關聯的限定符時,字符類只會指定其中的一個字符用于匹配。
如:pe[aei]r可能會匹配pear、peer、peir,但不會匹配per。
1、字符類中元字符的含義
①^元字符
^元字符,也稱為脫字符,當它是字符類中左方括號后面的第一個字符時,表示的是方括號中指定的任何字符都不能匹配的情況。
但當把^元字符用于字符類之外時,它就失去了在字符類內部作為第一個字符時所具有的的取反的含義。
如[^23]表示的是匹配除了2和3之外的字符;而[2^3]表示的是匹配2、^和3的字符。
②-元字符
-是用來表示范圍的連字符,如[0-9]表示0到9的數字,[a-z]表示a到z之間的小寫字母。
而[-09]則表示可以匹配
③取反
[A-Z&&[^B-D]]匹配處于A到Z之間并且不在B到D之間的字符,這種寫法可以用在java中。
三、限定符
? 表示匹配0或1次
* 表示匹配0或多次(大于或等于0次)
+ 表示匹配至少一次
{}
{0,1} 等價于?
{0,}等價于*
{1,}等價于+
{n}匹配n次
{m,n}至少匹配m次,最多匹配n次
四、捕獲組和非捕獲組的圓括號
1、捕獲組的圓括號
(Doctor|Dr.|Dr) (\s\w+\s) (\w+) 可以捕獲三組
常見用法:
①反向引用匹配重復的單詞
\<([A-Za-z]+) +\1\>
說明:\1表示的是匹配的第一個組的變量的值【ps:有些工具不是用\1,而是$1】
2、非捕獲組的圓括號
(Doctor|Dr.|Dr) (?:\s\w+\s) (\w+) 只捕獲兩組
說明:當在圓括號后面放置一個問號和一個冒號時,相應的這對圓括號就不會再捕獲內容了。
五、向前(向左)查找和向后(向右)查找
1、非捕獲組
(?:.....) 非捕獲組
2、肯定式向前查找(?=....)
肯定式向前查找是指在要匹配的字符序列后面必須存在某些字符序列(通常與要匹配的字符序列不同)的條件約束下完成的匹配過程。
例如,要匹配字符序列States中的State,可以用State(?=s)
3、否定式向前查找(?!....)
否定式向前查找是指在要匹配的字符序列后面不存在某些字符序列的附加條件約束下完成的匹配過程。
例如,要匹配字符序列Star,但這個字符序列后面不能緊跟一個空格符,可以用Star(?! )或Star(?!\b)
4、肯定式向后查找(?<=...)
比方說,如果只想在前面有字符序列Dr.(一個大寫的D,一個小寫的r,一個據點和一個空格)的情況下才匹配姓氏Lin,那么就可以用下面的模式:
(?<=Dr. )Lin
5、否定式向后查找(?<!)
例如,如果只想在前面沒有字符序列Dr.(一個大寫的D,一個小寫的r,一個據點和一個空格)的情況下才匹配姓氏Lin,那么就可以用下面的模式:
(?<!Dr. )Lin
. ? 可以匹配任何字母字符和數字,包括標點符號和空白符等
\d 匹配數字 。與[0-9]等價
\D 非數字
\w 匹配英文字母字符、數字和下劃線。與[A-Za-z0-9_]等價
\W 用于匹配\w不能匹配的字符,相反的字符
\s 匹配任何空白字符
\S 匹配任何非空白字符
\t 匹配制表符
\n 換行符
二、字符類
字符類是一些字符的無序集合,正則表達式模式可以從這個組合中挑選出一個字符類完成匹配。當字符類不帶有關聯的限定符時,字符類只會指定其中的一個字符用于匹配。
如:pe[aei]r可能會匹配pear、peer、peir,但不會匹配per。
1、字符類中元字符的含義
①^元字符
^元字符,也稱為脫字符,當它是字符類中左方括號后面的第一個字符時,表示的是方括號中指定的任何字符都不能匹配的情況。
但當把^元字符用于字符類之外時,它就失去了在字符類內部作為第一個字符時所具有的的取反的含義。
如[^23]表示的是匹配除了2和3之外的字符;而[2^3]表示的是匹配2、^和3的字符。
②-元字符
-是用來表示范圍的連字符,如[0-9]表示0到9的數字,[a-z]表示a到z之間的小寫字母。
而[-09]則表示可以匹配
③取反
[A-Z&&[^B-D]]匹配處于A到Z之間并且不在B到D之間的字符,這種寫法可以用在java中。
三、限定符
? 表示匹配0或1次
* 表示匹配0或多次(大于或等于0次)
+ 表示匹配至少一次
{}
{0,1} 等價于?
{0,}等價于*
{1,}等價于+
{n}匹配n次
{m,n}至少匹配m次,最多匹配n次
四、捕獲組和非捕獲組的圓括號
1、捕獲組的圓括號
(Doctor|Dr.|Dr) (\s\w+\s) (\w+) 可以捕獲三組
常見用法:
①反向引用匹配重復的單詞
\<([A-Za-z]+) +\1\>
說明:\1表示的是匹配的第一個組的變量的值【ps:有些工具不是用\1,而是$1】
2、非捕獲組的圓括號
(Doctor|Dr.|Dr) (?:\s\w+\s) (\w+) 只捕獲兩組
說明:當在圓括號后面放置一個問號和一個冒號時,相應的這對圓括號就不會再捕獲內容了。
五、向前(向左)查找和向后(向右)查找
1、非捕獲組
(?:.....) 非捕獲組
2、肯定式向前查找(?=....)
肯定式向前查找是指在要匹配的字符序列后面必須存在某些字符序列(通常與要匹配的字符序列不同)的條件約束下完成的匹配過程。
例如,要匹配字符序列States中的State,可以用State(?=s)
3、否定式向前查找(?!....)
否定式向前查找是指在要匹配的字符序列后面不存在某些字符序列的附加條件約束下完成的匹配過程。
例如,要匹配字符序列Star,但這個字符序列后面不能緊跟一個空格符,可以用Star(?! )或Star(?!\b)
4、肯定式向后查找(?<=...)
比方說,如果只想在前面有字符序列Dr.(一個大寫的D,一個小寫的r,一個據點和一個空格)的情況下才匹配姓氏Lin,那么就可以用下面的模式:
(?<=Dr. )Lin
5、否定式向后查找(?<!)
例如,如果只想在前面沒有字符序列Dr.(一個大寫的D,一個小寫的r,一個據點和一個空格)的情況下才匹配姓氏Lin,那么就可以用下面的模式:
(?<!Dr. )Lin
總結
以上是生活随笔為你收集整理的正则表达式总结(待续)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: shell十三问--shell教程
- 下一篇: 设计一个莫尔斯电码电报机