正则表达式基本语法

正则表达式基本语法
--------------------------------------------------------------------------------------------------------------------------
普通字符:
  字母、数字、汉字、下划线,以及没有被定义特殊意义的标点符号,都是 "普通字符"。
说明:
  "普通字符" 在匹配时,匹配与之相同的一个字符。如果一个表达式中,所有的字符都是 "普通字符",
  那么这个表达式的匹配操作,实际上就是一个普通的 "字符串查找" 操作。
--------------------------------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------------------------------------------------
简单的转义字符:(注意:java的正则表达式转义字符,一定要用双反斜线\\)
  一些不便书写的字符,比如换行符,制表符等,使用 \n,\t 来表示。
  另外有一些标点符号在正则表达式中,被定义了特殊的意义,因此需要在前面加 "\"
  进行转义后,匹配该字符本身。
说明:
  转义符          说明
   \a           响铃符 = \x07
   \f           换页符 = \x0C
   \n           换行符 = \x0A
   \r           回车符 = \x0D
   \t           制表符 = \x09
   \v           垂直制表符 = \x0B
   \e           ESC 符 = \x1B
   \x20          使用两位十六进制表示形式,可与该编号的字符匹配
   \u002B         使用四位十六进制表示形式,可与该编号的字符匹配
   \x{20A060}       使用任意位十六进制表示形式,可与该编号的字符匹配
  
  被定义了特殊的意义,因而需要在前面添加 "\" 来匹配该字符本身的标点符号:
 
  字符           说明
   ^            匹配输入字符串的开始位置。要匹配 "^" 字符本身,请使用 "\^"
   $            匹配输入字符串的结尾位置。要匹配 "$" 字符本身,请使用 "\$"
   ( )           标记一个子表达式的开始和结束位置。要匹配小括号,请使用 "\(" 和 "\)"
   [ ]           用来自定义能够匹配 '多种字符' 的表达式。要匹配中括号,请使用 "\[" 和 "\]"
   { }           修饰匹配次数的符号。要匹配大括号,请使用 "\{" 和 "\}"
   .            匹配除了换行符(\n)以外的任意一个字符。要匹配小数点本身,请使用 "\."
   ?            修饰匹配次数为 0 次或 1 次。要匹配 "?" 字符本身,请使用 "\?"
   +            修饰匹配次数为至少 1 次。要匹配 "+" 字符本身,请使用 "\+"
   *            修饰匹配次数为 0 次或任意次。要匹配 "*" 字符本身,请使用 "\*"
   |            左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|"
-------------------------------------------------------------------------------------------------------------------------- 

 


--------------------------------------------------------------------------------------------------------------------------
转义字符 \Q...\E:
  使用 \Q 开始,\E 结束,可使中间的标点符号失去特殊意义,将中间的字符作为普通字符。
  使用 \U 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的小写字母转换成大写。
    在大小写敏感模式下,只能与大写文本匹配。
  使用 \L 开始,\E 结束,除了具有 \Q...\E 相同的功能外,还将中间的大写字母转换成小写。
    在大小写敏感模式下,只能与小写文本匹配。

说明:
\Q...\E 适合用于:表达式中需要比较长的普通文本,而其中包含了特殊符号。
  举例
  表达式          说明
   \Q(a+b)*3\E       可匹配文本 "(a+b)*3"。
  \(a\+b\)\*3       如果不使用 \Q...\E 进行转义,则对每个特殊符号进行转义。
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
字符集合:
  可以匹配 "多个字符" 其中任意一个字符的正则表达式。虽然是 "多个字符",但每次只能匹配其中一个。
说明:
  字符集合         说明
   .            小数点可以匹配除了换行符(\n)以外的任意一个字符
   \w           可以匹配任何一个字母或者数字或者下划线
   \W           W大写,可以匹配任何一个字母或者数字或者下划线以外的字符
   \s           可以匹配空格、制表符、换页符等空白字符的其中任意一个
   \S           S大写,可以匹配任何一个空白字符以外的字符
   \d           可以匹配任何一个 0~9 数字字符
  \D           D大写,可以匹配任何一个非数字字符
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
自定义字符集合 [ ]:
  用中括号 [ ] 包含多个字符,可以匹配所包含的字符中的任意一个。同样,每次只能匹配其中一个。
  用中括号 [^ ] 包含多个字符,构成否定格式,可以匹配所包含的字符之外的任意一个字符。
说明:
  正则表达式中的特殊符号,如果被包含于中括号中,则失去特殊意义,但 \ [ ] : ^ - 除外。
  标准字符集合,除小数点(.)外,如果被包含于中括号中,自定义字符集合将包含该集合。
    比如:[\d.\-+],将可以匹配数字,小数点和 + - 符号。(小数点和 + 号失去特殊意义)
  用减号相连的 2 个普通字符,自定义字符集合将包含该范围。
    比如:[\dA-Fa-f],将可以匹配 0 - 9, A - F, a - f。
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
匹配次数限定符: 使被修饰的表达式可多次重复匹配的修饰符。


说明:
  可使被修饰的表达式重复固定次数,也可以限定一定的重复匹配的次数范围。
  
  在限定符之后的表达式能够匹配成功的情况下,不定次数的限定符总是尽可能的多匹配。
  如果之后的表达式匹配失败,限定符可适当“让出”能够匹配的字符,以使整个表达式匹配成功。
  这种模式就叫“贪婪模式”。
  限定符          说明
   {n}           表达式固定重复n次,比如:"\w{2}" 相当于 "\w\w"
   {m, n}         表达式尽可能重复n次,至少重复m次:"ba{1,3}"可以匹配 "ba"或"baa"或"baaa"
   {m, }          表达式尽可能的多匹配,至少重复m次:"\w\d{2,}"可以匹配 "a12","x456"...
   ?            表达式尽可能匹配1次,也可以不匹配,相当于 {0, 1}
   +            表达式尽可能的多匹配,至少匹配1次,相当于 {1, }
   *            表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }
  
   
   "勉强模式"限定符
  在限定符之后添加问号(?),则使限定符成为“勉强模式”。勉强模式的限定符,总是尽可能少的匹配。
  如果之后的表达式匹配失败,勉强模式也可以尽可能少的再匹配一些,以使整个表达式匹配成功。
  限定符          说明
   {m, n}?         表达式尽量只匹配m次,最多重复n次。
   {m, }?         表达式尽量只匹配m次,最多可以匹配任意次。
   ??           表达式尽量不匹配,最多匹配1次,相当于 {0, 1}?
   +?           表达式尽量只匹配1次,最多可匹配任意次,相当于 {1, }?
  *?           表达式尽量不匹配,最多可匹配任意次,相当于 {0, }?
  
  
  "占有模式"限定符
  在限定符之后添加加号(+),则使限定符成为“占有模式”。占有模式的限定符,总是尽可能多的匹配。
  与“贪婪模式”不同的是,即使之后的表达式匹配失败,“占有模式”也不会“让出”自己能够匹配的字符。
  限定符          说明
   {m, n}+         表达式尽可能重复n次,至少重复m次。
   {m, }+         表达式尽可能的多匹配,至少重复m次。
   ?+           表达式尽可能匹配1次,也可以不匹配,相当于 {0, 1}+
   ++           表达式尽可能的多匹配,至少匹配1次,相当于 {1, }+
   *+           表达式尽可能的多匹配,最少可以不匹配,相当于 {0, }+
--------------------------------------------------------------------------------------------------------------------------

 

--------------------------------------------------------------------------------------------------------------------------
字符边界:
  本身不匹配任何字符,只对字符边界和字符间缝隙附加条件的表达式。
说明:
  有些正则表达式中的符号,可以对文本中当前所在位置作限制条件.
  边界条件         说明
   ^            当前位置必须是文本开始位置
   $            当前位置必须是文本结束位置
   \b           当前位置的左右两侧,只能有一侧是字母数字或下划线
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
选择表达式 xxx | xxx:
  使用竖线 "|" 分隔多段表达式,整个表达式可匹配其中任意一段。
说明
  正则引擎总是从左向右进行尝试匹配,如果每一段表达式都匹配失败,则整个表达式匹配失败。
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
分组 ( ):(注:这是捕获组)
  用括号 ( ) 将其他表达式包含,可以使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。
  另外,用括号包含的表达式,所匹配到的内容将单独作记录,匹配过程中或结束后可以被获取。
说明
  每一对括号会分配一个编号,使用 () 的捕获根据左括号的顺序从 1 开始自动编号。捕获元素编号为零的第一
  个捕获是由整个正则表达式模式匹配的文本---就是整个表达式
  
组和捕获
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1     ((A)(B(C)))
2     \A
3     (B(C))
4     (C)
组零始终代表整个表达式。
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
字符类运算符的优先级如下所示,按从最高到最低的顺序排列:
1     字面值转义       \x
2     分组        [...]
3     范围        a-z
4     并集        [a-e][i-u]
5     交集        [a-z&&[aeiou]]
--------------------------------------------------------------------------------------------------------------------------

 


--------------------------------------------------------------------------------------------------------------------------
非捕获组 (?:xxx):
  使用 (?: ) 包含其他表达式,可使被包含的表达式组成一个整体,在被修饰匹配次数时,可作为整体被修饰。
说明:
  与普通分组不同的是,非捕获组不记录所匹配的内容,比普通分组更节约内存资源。
  通过格式 (?ismg-ismg:xxx) 可对匹配模式进行修改,修改后的模式只对当前非捕获组内部起作用。
--------------------------------------------------------------------------------------------------------------------------

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值