正則表達式是由元字符和普通字符組成肿轨。所謂元字符就是類似于“*”、“蕊程?”之類的有意義的字符椒袍,所謂的普通字符就是字符串中常用的字符。將普通字符和元字符放在一對斜杠(/)中存捺,就可以組成一個正則表達式槐沼。
1曙蒸、匹配字符
最簡單的正則表達式就是字符本身的匹配,這種匹配方法相當于精確查找岗钩。
比如:/abc/? 纽窟,可以匹配到字符串“abc”(注意是匹配到字符串“abc”,不是單個字符“a”或“b”或“c”)兼吓;
正則表達式中有很多字符有特殊意義臂港,要匹配單個的字符(比如“?”)视搏,需要在轉義字符前加上反斜杠“\”审孽,
正則表達式中有很多轉義字符:“\!”,“\$”浑娜,“\^”佑力,“\*”,“\+”筋遭,“\=”打颤,“\|”,“\.”漓滔,“\?”编饺,“\\”,“\/”响驴,“\(”透且,“\)”,“\[”豁鲤,“\]”秽誊,“\{”,“\}”琳骡,“\o”养距,“\t”,“\n”日熬,“\v”,“\f”肾胯,“\r”竖席,“\xnn”,“\uxxxx”敬肚,“\cX”毕荐。
2、字符類
字符類在正則表達式中可以代表一系列字符艳馒,而不是只能代表一個字符或一個子字符串憎亚,字符串類是以中括號作為分界符的员寇。
比如:/[ABC]/?? ,可以匹配到“A”或“B”或“C”單個字符第美;假如要匹配的字符串為“JAVASCRIPT”蝶锋,只會匹配到第一個“A”(因為除非使用全局模式標志,在完成第一次匹配后不會再進行后面的匹配了)什往;
使用字符類還可以制定一系列字符:/[A-Z]/? //可以匹配到字母A到Z扳缕,/[a-z]/? //可以匹配到字母a到z,/[A-Za-z]/? //可以匹配到字母A到Z和字母a到z别威,/[0-9]/? //可以匹配到數字0到9躯舔,/[A-Za-z0-9]/? //可以匹配到字母A到Z、字母a到z省古、數字0到0粥庄,/[A-D159]/? //可以匹配到字母A到D和數字1、5豺妓、9惜互;
除了要將匹配的字符放在[]中外,字符類還定義了一些特殊的字符科侈,可以更加靈活地匹配到字符串载佳;比如:字符類“XYZ”:字符集,可以匹配到中括號中的字符臀栈;字符類“^”:非字符集蔫慧,可以匹配到非中括號中的任何字符;字符類“.”:匹配除了答行符和其他Unicode行符之外的所有字符权薯;字符類“\w”:匹配任何ASCII單字字符姑躲,相當于[a-zA-Z0-9];字符類“\W”:匹配到所有ASCII單字字符之外的字符盟蚣,相當于[^a-zA-Z0-9]黍析;字符類“\s”:匹配任何Unicode空白符,相當于[\f\n\r\t\v\u00A0\u2028\u2029]屎开;字符類“\S”:匹配任何Unicode空白符之外的字符相當于[^\f\n\r\t\v\u00A0\u2028\u2029]阐枣;字符類“\d”:匹配任何數字,相當于[0-9]奄抽;字符類“\D”:匹配任何數字之外的字符蔼两,相當于[^0-9]。
3逞度、界定符
假設有一個字符串內容為“BaaaaaBaaaaaB”额划,要求匹配到第一個“B”和最后一個“B”,則可以使用界定符档泽;
界定符“^”可以匹配到一行字符的開頭俊戳,“/^B/”可以匹配到第一個“B”揖赴;界定符“$”可以匹配到一行字符的結尾,“/B$/”可以匹配到最后一個“B”抑胎;
更多界定符:界定符“^”:匹配行首燥滑,多用于多行文本搜索;界定符“$”:匹配行尾圆恤,多用于多行文本搜索突倍;界定符“\b”:匹配單詞的邊界,多用于英文文本盆昙;界定符“\B”:與\b相反羽历,匹配到一個非單詞的邊界。
4淡喜、選擇符
假設要在一個字符串中查找子字符串A和子字符串B秕磷,在正則表達式中用一個選擇符“|”,使用這個選擇符可以匹配多個子字符串炼团;例如字符串1“AAAaaaaaaaBBB”澎嚣、字符串2“AAAaaaaaaa”、字符串3“BBBaaaaaaa”瘟芝,使用/AAA|BBB/都可以去匹配易桃;但是匹配字符串1的話,只會匹配到AAA,因為除非使用全局模式標志锌俱,在完成第一次匹配后不會再進行后面的匹配了晤郑,包括字符和字符類以及所有的匹配方式都是這樣。
5贸宏、重復類
字符類都只能匹配一個字符造寝,如“[0-9]”只能匹配數字0到9,如果要匹配數字10到99就不行了吭练;正則表達式提供了重復類來匹配這種重復的現象诫龙;比如重復類“{n}”可以將前一項重復n次;
/[\d]{2}/????? 將“[\d]”重復兩次鲫咽,相當于“/[\d][\d]/”
/ab{2}/????? 將“b”重復兩次签赃,相當于“/abb/”
在正則表達式“/[\d]{2}/”中可以匹配到00到99之間的數字,但如果0到99之間的數字需要用“/[\d]|[\d]{2}/”
/[\d]{1,3}/????? 將“[\d]”重復1到3次分尸,相當于“/[\d]/”或“/[\d][\d]/”或“/[\d][\d][\d]/”
/ab{1,3}/????? 將“b”重復1到3次姊舵,相當于“/ab/”或“/abb/”或“/abbb/”
更多重復類:1、{n}:匹配前一項n次寓落;2、{n,m}:匹配前一項n到m次荞下;3伶选、{n,}:匹配前一項至少n次史飞;4、?:酦醅前一項0次或者1次仰税,相當于{0,1}构资;5、+:匹配前一項至少1次陨簇,相當于{1,}吐绵;6、*:匹配前一項0次貨多次河绽,相當于{0,}己单;
6、分組
假設要匹配字符串“java”或“javascript”耙饰,除了選擇符纹笼,還可以使用小括號將字符串分組來實現,分了組的字符串可以看成一個整體苟跪;
比如:/java(script)?/廷痘,“script”被小括號括起來視為一個整體,又因為重復類“?”會將整個“script”重復0次或者1次件已,所以可以匹配字符串“java”或“javascript”笋额。
7、引用
在正則表達式中篷扩,會給每一個分組分配一個編號兄猩,使用編號可以將匹配到的內容在正則表達式中作進一步的處理;編號方式為:從正則表達式左側開始瞻惋,第一個分組編號為1厦滤,第二個為2,以此類推歼狼;
分組編號后掏导,可以使用“\n”來引用分組匹配的字符串;如“\1”位第一個分組匹配的字符串羽峰;/(java)?Script\1:趟咆,該正則表達式可以匹配到“javascriptjava”或“script”;
在某些情況下梅屉,可能要將匹配到的字符串分組值纱,但不記錄該組匹配的字符串,那么久可以使用“(?)”符號類進行分組坯汤,比如:/(?:java){0,1}(Script){0,1}\1/虐唠,可以匹配到“java”或“JavaScriptScript”。
8惰聂、其他匹配
正則表達式中海油兩種選擇性匹配:
x(?=y):只有x后面緊跟著y才匹配疆偿;
x(?!y):只有x后面不是y才匹配咱筛。
9、匹配規(guī)則
正則表達式在匹配字符串時杆故,只要遇上可以匹配的內容就會停止匹配迅箩;如果想要繼續(xù)匹配的話,就必須在正則表達式后加上標志符“g”处铛,如/a/g饲趋;
更多標志符:1、i:匹配時不區(qū)分大小寫撤蟆;2奕塑、g:匹配能匹配的所有字符,而不是在匹配第一個后就停止匹配枫疆;3爵川、m:執(zhí)行多行匹配模式,也就是使用“^”和“$”來匹配開頭和結尾息楔。