加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式

发布时间:2020-12-13 23:07:23 所属栏目:百科 来源:网络整理
导读:正则表达式 一、字符解释 1、^为限制开头 ^java :条件限制为 java 为开头的字符。 2、$为限制结尾 java$ :条件限制为以 java 为结尾符。 3、 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配n

正则表达式

一、字符解释

1、^为限制开头

^java :条件限制为 java 为开头的字符。

2、$为限制结尾

java$ :条件限制为以 java 为结尾符。

3、

将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配n。“n”匹配换行符。序列“”匹配“”而“(”则匹配“(”。

4、?

匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。

5、*

匹配前面的子表达式零次或多次(大于等于0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。

6、+

匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

7、{n}

n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

8、点.

匹配除“rn”之外的任何单个字符。要匹配包括“rn”在内的任何字符,请使用像“[sS]”的模式。

9、x|y

匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。

10、[^abc]

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

11、[a-z]

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

12、b

能匹配一个单词的边界,例如 erb 能匹配到nerver的er,但不能匹配“verb”中的“er”。

13、B

匹配非单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

14、d

匹配一个数字字符,相当于[0-9]

15、D

匹配一个非数字字符,相当于[^0-9]

16、w

匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。

17、W

匹配任何非单词字符。等价于“[^A-Za-z0-9_]

18、|

将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。

19、( )

将 ( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 1 到9 的符号来引用。

20、s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ fnrtv]。

21、S

匹配任何非空白字符。等价于[^ fnrtv]。
22、f
匹配一个换页符。
23、n
匹配一个换行符
24、r
匹配一个回车符












◆ 比如,在字符串包含验证时

// 查找以 Java 开头,任意结尾的字符串
  Pattern pattern = Pattern.compile("^Java.*");
  Matcher matcher = pattern.matcher("Java 不是人 ");
  boolean b= matcher.matches();
  // 当条件满足时,将返回 true ,否则返回 false
  System.out.println(b);

◆ 以多条件分割字符串时
Pattern pattern = Pattern.compile("[,|]+");
String[] strs = pattern.split("Java Hello World  Java,Hello,World|Sun");
for (int i=0;i<strs.length;i++) {
    System.out.println(strs[i]);
}

◆ 文字替换(首次出现字符)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World");
// 替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));

◆ 文字替换(全部)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World");
// 替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));


◆ 文字替换(置换字符)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
    matcher.appendReplacement(sbr,"Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());

◆ 验证是否为邮箱地址

String str="ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("[w.-]+@([w-]+.)+[w-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());

◆ 去除 html 标记
Pattern pattern = Pattern.compile("<.+?>",Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href="index.html"> 主页 </a>");
String string = matcher.replaceAll("");
System.out.println(string);

◆ 查找 html 中对应条件字符串
Pattern pattern = Pattern.compile("href="(.+?)"");
Matcher matcher = pattern.matcher("<a href="index.html"> 主页 </a>");
if(matcher.find())
  System.out.println(matcher.group(1));
}

◆ 截取 http:// 地址
// 截取 url
Pattern pattern = Pattern.compile("(http://|https://){1}[w.-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){             
    buffer.append(matcher.group());       
    buffer.append("rn");             
System.out.println(buffer.toString());
}
       
◆ 替换指定 {} 中文字

String str = "Java 目前的发展史是由 {0} 年 -{1} 年 ";
String[][] object={new String[]{"{0}","1995"},new String[]{"{1}","2007"}};
System.out.println(replace(str,object));

public static String replace(final String sourceString,Object[] object) {
            String temp=sourceString;   
            for(int i=0;i<object.length;i++){
                      String[] result=(String[])object[i];
               Pattern    pattern = Pattern.compile(result[0]);
               Matcher matcher = pattern.matcher(temp);
               temp=matcher.replaceAll(result[1]);
            }
            return temp;
}


◆ 以正则条件查询指定目录下文件

 // 用于缓存文件列表
        private ArrayList files = new ArrayList();
        // 用于承载文件路径
        private String _path;
        // 用于承载未合并的正则公式
        private String _regexp;
       
        class MyFileFilter implements FileFilter {

              /**
               * 匹配文件名称
               */
              public boolean accept(File file) {
                try {
                  Pattern pattern = Pattern.compile(_regexp);
                  Matcher match = pattern.matcher(file.getName());               
                  return match.matches();
                } catch (Exception e) {
                  return true;
                }
              }
            }
       
        /**
         * 解析输入流
         * @param inpu

/* 主要是为了能找出在一次匹配中你更关心的部分。
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 "(x)(yw*)(z)" 中,存在三个这样的组: 
1. x
2. yw*
3. z*/
 //m.group(2) return y123 y456
 //m.group() return xy123z xy456z
 @Test
 public void test3(){
  String regex = "(x)(yw*)(z)";
  String input = "exy123z,xy456z";
  Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
  Matcher m = p.matcher(input);
  while (m.find()) {
//  System.out.println(m.group(2));
//  System.out.println(m.groupCount());
  System.out.println(m.group());
  }
  
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读