正则表达式

Posted wjw0324

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式相关的知识,希望对你有一定的参考价值。

说明:正则在大多数程序语言中都是适用的,个人觉得学不好正则的程序员是个不合格的程序员,所以突然想整理一篇关于正则表达式的文章,以免用到的时候去百度。下面进入正题

一、使用正则表达式的目的

1.可以截取我们想要字符的部分

2.可以替换字符串的部分(文本全局替换)

3.检查字符串是否符合要求

二、正则元字符

    反斜杠转义字符  例如 匹配换行符  匹配空格  相当于回车

  ^ 行首

  $ 行尾

  * 表示前面子表达式任意次数,等价于{0,}

  + 表示前面子表达式次数大于等于1,等价于{1,}

  ?表示前面子表达式零次或一次 等价于{0,1}  例如“yes(no)?”  可以匹配 yes或者yesno

  {n} 表示前面子表达式n次

  {n,}至少匹配n次

  {n,m} 匹配次数在n,m之间保含n,m

  ?紧跟在限制符后面*,+,?,{n},{n,},{n,m}后面时,匹配模式为非贪婪模式,竟可能少的匹配,贪婪模式为

  尽可能多的匹配。例如“oooo” “o+” 匹配结果为["o","0","o","o"],而贪婪模式为["oooo"]

 1         String str1="oo123ooo";
 2         Pattern pattern1=Pattern.compile("o+");
 3         Pattern pattern2=Pattern.compile("o+?");
 4         Matcher matcher1 = pattern1.matcher(str1);
 5         while (matcher1.find()){
 6             System.out.println("m1:"+matcher1.group(0)); //m1:oo m1:ooo
 7         }
 8         Matcher matcher2 = pattern2.matcher(str1);
 9         while(matcher2.find()){
10             System.out.println("m2:"+matcher2.group(0));// m2:o m2:o m2:o m2:o m2:o
11         }

  x|y 匹配x或y 

  [xyz] 匹配xyz任一字符

  [^xyy] 匹配除xyz任一字符

  [a-z] 任一小写字母

  [A-Z] 任一大写字母

  [0-9] 0-9中任一数字  等价于 d

  [^0-9] 除0-9意外任一字符  等价于D

  f 换页符

  w 等价于[a-zA-Z0-9_]  匹配单词字符

  W 匹配非单词字符

  s 匹配任何不可见字符 等价于[f v]

  S 匹配任何可见字符

 

三、java中实例应用

  1.替换

        String str3="abc345abc678";
        String regex3="[a-z]+";
        String str4 = str3.replaceAll(regex3, "hello");
        System.out.println(str4); //hello345hello678
        非懒惰模式
String str3="abc345abc678"; String regex3="[a-z]+?"; String str4 = str3.replaceAll(regex3, "hello"); System.out.println(str4); //hellohellohello345hellohellohello678

 

  2.判断是否符合正则

//判断qq邮箱

        String email="[email protected]";
        String regex4="^[1-9][0-9]{4,10}@qq.com$";
        System.out.println(email.matches(regex4));  //true

 

  3.Pattern对象 获取字符串中匹配正则的所有matcher集合

 1         String str1="oo123ooo";
 2         Pattern pattern1=Pattern.compile("o+");
 3         Pattern pattern2=Pattern.compile("o+?");
 4         Matcher matcher1 = pattern1.matcher(str1);
 5         while (matcher1.find()){
 6             System.out.println("m1:"+matcher1.group(0)); //m1:oo m1:ooo
 7         }
 8         Matcher matcher2 = pattern2.matcher(str1);
 9         while(matcher2.find()){
10             System.out.println("m2:"+matcher2.group(0));// m2:o m2:o m2:o m2:o m2:o
11         }

四、js中实例应用

  1.判断合法url

  

var r=new RegExp(/^(http)s?://w+.w+.com$/)
undefined
r.test(‘http://www.baidu.com‘)
true

  2.js替换   跟上g可以全局替换

var r=/http/g
undefined
‘http://www.baidu.com.http‘.replace(r,‘https‘)
"https://www.baidu.com.https"

 

 

 

  


以上是关于正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

循环通过 python 正则表达式匹配

asp.net 使用正则表达式验证包含打开/关闭括号片段的属性字符串

攻破难啃的骨头-正则表达式(转)

正则表达式的贪婪和非贪婪模式