正则表达式入门之字符匹配
正則表達式入門-字符匹配
在前段時間進行文本挖掘練習的時候,不會使用正則表達式,深感不宜。所以這里,我想趕緊學(xué)習一下正則表達式。
注:本文是對《正則表達式必知必會》的復(fù)習。
1.正則表達式簡介
正則表達式是一些用來匹配和處理文本的字符串,正則表達式語言用來構(gòu)造正則表達式(最終構(gòu)造出的字符串就成為正則表達式).
正則表達式語言并不是一種完備的程序設(shè)計語言,它甚至算不上是一種能夠直接安裝并運行的程序。
更準確地說,正則表達式語言是內(nèi)置于其他語言或軟件里的迷你語言。
2.匹配單個字符
2.1匹配純文本
例1
#文本 Hello, my name is Goat. #正則表達式 Goat#結(jié)果
Hello, my name is Goat.Goat本身是純文本,所以看起來不像是正則表達式,但它確實是。?
正則表達式可以包含純文本,甚至可以只包含純文本。
2.2匹配任意字符
在正則表達式中,特殊字符(或字符集合)用來給出要搜索的東西。字符.(英文句號)可以匹配任何一個單個的字符。
例1
#文本 sales1.csv orders3.csv sales2.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv #正則表達式 sales.#結(jié)果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv正則表達式sales.把字符串sales和另一個字符構(gòu)成的文件名查找出來。8個文件里有3個與這個模式相匹配。
.字符可以匹配任何單個的字符、字母、數(shù)字、甚至是.字符本身。
在同一個正則表達式中,可以出現(xiàn)多個.字符,他們既可以連續(xù)出現(xiàn),也可以間隔出現(xiàn)在模式的不同位置。
例2
#文本 sales1.csv orders3.csv sales2.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv #正則表達式 .a..#結(jié)果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv我們想要把以na或sa開頭的文件找出來。正則表達式.a..將na1.csv、na2.csv、sa1.csv找出來,但他還找出了4個我們并不需要的匹配結(jié)果。
?
2.3匹配特殊字符
.字符在正則表達式中有特殊含義,如果我們需要一個.字符,而不是它在正則表達式中的特殊含義,
我們就需要在.前面加上\(反斜杠)字符,對他進行轉(zhuǎn)義。\是一個元字符(表示這個字符有特殊含義,而不是字符本身含義).
例1
#文本 sales1.csv orders3.csv sales2.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv #正則表達式 .a.\.csv#結(jié)果
sales1.csv
orders3.csv
sales2.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv可以看到,我們正確匹配了,我們想要的字符串。
在正則表達式中,\字符永遠出現(xiàn)在一個有著特殊含義的字符序列開頭,這個序列可以由一個或者多個字符構(gòu)成。
如果需要搜索\本身,就必須對\進行轉(zhuǎn)義,相應(yīng)的轉(zhuǎn)義序列是兩個連續(xù)的反斜杠字符\\。
3.匹配一組字符
3.1匹配多個字符中的一個
與匹配任意單個字符的.字符不同,字符集合能匹配特定的字符和字符區(qū)間。
例1(相比于上例減少了sales2.csv,增加了ca1.csv)
#文本 sales1.csv orders3.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv ca1.csv #正則表達式 [ns]a.\.csv#結(jié)果
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv這里正則表達式以[ns]開頭,表示這個集合將匹配字符n或s(但不匹配字符c或其他字符)。
在使用[和]定義的字符集合里,這兩個元字符之間所有字符都是該集合的組成部分,
字符集合的匹配結(jié)果是能夠與該集合里任意一個成員匹配的文本。
字符集合在不需要區(qū)分大小寫的搜索操作里比較常見。
3.2利用字符集合區(qū)間
例1(相比于上例增加了sam.csv)
#文本 sales1.csv orders3.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv ca1.csv sam.csv #正則表達式 [ns]a[0-9]\.csv#結(jié)果
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv為了避免匹配到sam.csv我們在正則表達式中,將.字符替換成[0-9],表示匹配0到9之間的任意一個數(shù)字。
在這里正則表達式提供了一個特殊的元字符,字符區(qū)間可以用-(連字符)來定義。
-(連字符)作為元字符,只能在[和]之間,在字符集合以外的地方,-只是一個普通的字符,只能和-本身匹配,因此在正則表達式中-不需要轉(zhuǎn)義。
要避免讓這個區(qū)間的尾字符小于首字符(例如[3-1]),這種區(qū)間沒有意義。
字符區(qū)間并不僅限于數(shù)字,以下都是合法字符區(qū)間:
| A-Z | 匹配A到Z所有大寫字母 |
| a-z | 匹配a到z所有小寫字母 |
| A-F | 匹配A到F所有大寫字母 |
| A-z | 匹配ASCII字符A到ASCII字符z的所有字母 |
3.3取非匹配
例1
#文本 sales1.csv orders3.csv sales.csv apac1.csv na1.csv na2.csv sa1.csv ca1.csv sam.csv #正則表達式 [ns]a[^0-9]\.csv#結(jié)果
sales1.csv
orders3.csv
sales.csv
apac1.csv
na1.csv
na2.csv
sa1.csv
ca1.csv
sam.csv這個例子中[0-9]變成了[^0-9],表示匹配的是任何不是數(shù)字的字符。元字符^來表示對一個字符集合進行取非匹配。
^的效果將作用于給定字符集合里的所有字符或字符區(qū)間,而不僅限于緊跟在^字符后的那一個字符或字符區(qū)間。
總結(jié)
以上是生活随笔為你收集整理的正则表达式入门之字符匹配的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: flash CS6怎么制作水滴下落的动画
- 下一篇: 正则表达式入门之使用元字符