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阅读 161,326评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,228评论 1 304
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,979评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,489评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,894评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,900评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,075评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,803评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,565评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,778评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,255评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,582评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,254评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,151评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,952评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,035评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,839评论 2 277

推荐阅读更多精彩内容