JAVA正則表達式語法

正則表達式是由元字符和普通字符組成。所謂元字符就是類似于“*”、“?”之類的有意義的字符,所謂的普通字符就是字符串中常用的字符。將普通字符和元字符放在一對斜杠(/)中,就可以組成一個正則表達式。

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、匹配規則

正則表達式在匹配字符串時,只要遇上可以匹配的內容就會停止匹配;如果想要繼續匹配的話,就必須在正則表達式后加上標志符“g”,如/a/g;

更多標志符:1、i:匹配時不區分大小寫;2、g:匹配能匹配的所有字符,而不是在匹配第一個后就停止匹配;3、m:執行多行匹配模式,也就是使用“^”和“$”來匹配開頭和結尾。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,963評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,348評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,083評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,706評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,442評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,802評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,795評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,983評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,542評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,287評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,486評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,030評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,710評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,116評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,412評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,224評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,462評論 2 378

推薦閱讀更多精彩內容