正则表达式规则

正则表达式是一个用字符串描述一个匹配规则的字符串,使用正则表达式可以快速判断给定的字符串是否符合匹配规则,Java内建正则表达式引擎java.util.regex

1.匹配规则

1)从左到右按规则匹配。

 

  例1:精确匹配:“abc” ,则只能“abc”匹配,"ab"/"Abc"/"abcd"都不可以。

  例2:精确匹配:"a\&c"(特殊字符需要转义),则只能"a&c"匹配,"ab"/"abc"/"a&cd"都不可以。 

  例3:精确匹配:"a\u548cc",非ASCII字符用\U####表视,则能"a和c"匹配,"a与c"/"a&c"/"abc"都不可以。 

  例4:特殊符号“.” 可以匹配任意字符:“a.c”,则能"abc"/"a&c"匹配,"ac"/"accc"都不可以。 

  例5:符号\d可以匹配一个数字:"00\d",则能"007"/“008”匹配,"00A"/"0077"都不可以。

  例6:符号\w可以匹配一个字母/数字或者下划线:"java\w",则能"javac"/"java8"/"java_"匹配,"java#"/"java "都不可以。

  例7:符号\s可以匹配一个空白字符:"A\sB",则能"A B"/"A    B"(Tab键也算一个空白字符)匹配,"AB"/"A  B"(两个空格)都不可以。

  例8:符号\D可以匹配一个非数字:"00\D",则能"00A"/"00#","001"/"007"都不可以。

  例9:符号\W可以匹配一个非字母/数字或者下划线:"java\W",则能"java!"/"java "匹配,"javac"/"java_"都不可以。

  例10:符号\S可以匹配一个非空白字符:"A\SB",则能"A&B"/"ABB"匹配,"A B"/"A    B"都不可以。

  例11:修饰符*可以匹配任意个字符:"A\d*"(*是用来修饰\d的),则能"A"/"A1"/"A007"匹配,"AB"不可以。

  例12:修饰符+可以匹配任意个字符:"A\d+"(+是用来修饰\d的),则能"A1"/"A007"匹配,"A"/"AB"都不可以。

  例13:修饰符?可以匹配零个或一个字符:"A\d?",则能"A"/"A1"匹配,"A12"/"AB"都不可以。

  例14:修饰符{n}可以匹配n个字符:"\d{6}",则能"123456"/"999999"匹配,"12345"/"1234567"/"12345A"都不可以。

  例15:修饰符{n,m}可以匹配n-m个字符:"\d{3,5}",则能"123"/"12345"匹配,"12"/"123456"/"123A5"都不可以。

  例16:修饰符{n,}可以匹配至少n个字符:"\d{3,}",则能"123"/"1234"/"123456789"匹配,"12"/"12A"都不可以。

2.复杂匹配规则

 1)

  例1:^和$匹配开头和结尾:"^A\d{3}$",则能"A001"/"A999"匹配,"B001"/"A0001"都不可以。Java的正则表达式默认只能做单行匹配,所以"^"和"$"可以加也可以不加。

  例2:[...]可以匹配范围内的字符:"[abc]1",则能"a1"/"b1"/"c1"匹配,"ab1"/"x1"都不可以。

  例3:[...]可以匹配一个范围内的字符:"[a-f]1",则能"a1"/"b1"/"f1"匹配,"q1"/"ab1"都不可以。

  例4:[...]可以匹配范围内的字符:"[a-f0-9]{6}",则能"1a2b3c"/"ffffff"/"ff0102"匹配,"abc12"/"A0000F"都不可以。

  例5:[...]可以匹配范围内的字符:"[a-f0-9_]{6}",则能"1a_b3c"/"_fffff"/"ff010_"匹配,"abc1-f"/"A000_F"都不可以。

  例6:[^...]可以匹配非范围内的字符:"[^0-9]{6}",则能"abcdef"/"$$$$$$"/"A-B-C-"匹配,"1abcde"/"A000F"都不可以。

  例7:AB|CD可以匹配AB或CD:"java|php",则能"java"/"php"匹配,"c++"/"jphp"都不可以。

  例8:(AB|CD)可以匹配AB或CD:"learn\s(java|php)",则能"learn java"/"learn php"匹配,"learn c++"/"learn python"都不可以。

  3.分组匹配规则

  例1:(...)可以分组:"(\d{4})\-(\d{1,2})\-(\d{1,2})",则可以匹配"2016-12-12"。

  例2:提取电话号码###-#######,^(\d{3,4})\-(\d{6,8})$

4.非贪婪匹配

  例:给定一个字符串表示的数字:

     判断该数字末尾0的个数,"123000":3个0,"10100":2个0,"1001":0个0。 我们可以使用^(\d+)(0*)$进行匹配。

匹配的结果和我们所设想的不一样,但是是正确的,这是因为正则表达式默认的是使用的贪婪匹配:尽可能多的向后匹配。

可以使用"?"实现非贪婪匹配,即"^(\\d+?)(0*)$"。

5.使用正则表达式搜索和替换:

  1)使用正则表达式分割字符串(String.split())

  2)使用正则表达式搜索字符串(Matcher.find())

  3)使用正则表达式替换(String.replaceAll())

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python正则表达式是一种强大的字符串处理工具,用于匹配、搜索和替换字符串中的字符模式。它可以通过提供一组规则来定义要匹配的模式。 Python正则表达式规则基于一些特殊字符和操作符,用于描述和定义不同类型的模式,其中一些重要的规则包括: 1. 普通字符:普通的字符在正则表达式中直接匹配对应的字符,例如正则表达式中的字符"a"可以匹配任何字符串中的字符"a"。 2. 特殊字符:正则表达式中有一些特殊字符具有特定的含义,例如"\d"表示匹配任何一个数字字符,"\w"表示匹配任何一个字母数字字符。 3. 字符类:字符类用于匹配一组字符,可以使用"[]"来定义字符类,例如"[aeiou]"表示匹配任何一个元音字母。 4. 量词:量词用于指定匹配模式的数量,例如"*"表示匹配前一个元素零次或多次,"+"表示匹配前一个元素一次或多次,"?"表示匹配前一个元素零次或一次。 5. 边界:边界用于指定匹配模式的位置,例如"^"表示匹配字符串的开头位置,"$"表示匹配字符串的结尾位置。 6. 分组:分组用于将多个表达式组合在一起,并对其进行匹配,可以使用"()"来定义分组,例如"(a|b)"表示匹配字符"a"或字符"b"。 以上是Python正则表达式的一些基本规则,可以根据具体需求灵活使用,通过编写正确的正则表达式,可以有效地实现字符串的模式匹配、搜索和替换操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值