美文网首页
Java基础之正则表达式

Java基础之正则表达式

作者: sofarsogoo_932d | 来源:发表于2018-05-31 00:59 被阅读0次

什么是正则表达式

简单来说,正则表达式就是一种规范,用于字符串匹配,查找,替换

正则表达式的应用场景

在平时的编程中,我们会遇到这样的场景,判断一个身份证号的真伪,这里我们就可以用正则表达式来判断。
身份证号是有一定规则的,这个规则我们可以用正则表达式抽象出来,然后利用这个正则表达式去匹配输入的字符串即可

Java中如何用正则表达式

JDK1.4之后,Java自带了支持正则表达式的包,这个包下面有两个类
Pattern和Matcher
举个栗子,我们来匹配一个正整数

String regx="^[1-9]\\d*$";
String str="1111";
Pattern pattern=Pattern.compile(regx);
Matcher matcher=pattern.matcher(str);
Log.d("TAG","matche:"+matcher.matches());
Log.d("TAG","matche:"+matcher.find());

我们来解析一下这段代码
第一行,定义了正整数规则的正则表达式
第二行,写了一个带匹配的字符串
第三行,将正则表达式编译成java认识的模式
第四行,利用Matcher去和传入的字符串进行匹配

剩下的2行日志,是为了测试匹配的结果
其中matches的意思是整个字符串都符合正则的规则才返回ture
find的意思是只要字符串的子串符合正则的规则就返回true

Java正则表达式语法

^
放在最前面,表示匹配字符串的起始位置,如^a,则Aa,起始的字符串是A,因此不匹配,而aAA则匹配
放在[]里面,如[^0-9],意思是非数字
如果想匹配^,则可以使用^

$
意思和^一样,只不过它匹配的是字符传结尾的位置

[]
[]中的内容是可选字符,如[0-9]要求字符在0到9之间

()
对正则表达进行编组,在后面mather的group中会用到
括起来的算一个子表达式,如
^([a][b]){2}$ 匹配abab,即括号里面的整体出现2次
^[a][b]{2}$ 匹配abb,即{}限定符前面的b出现2次

|
匹配任意一个由竖线分割的字符
如b(a|i|e)d,匹配bad,bid,bed

{}
匹配它前面的子表达式出现的次数
如[0-9]{n},出现n次,[0-9]{n,m}出现n到m次

*
匹配它前面的子表达式零次或多次。要匹配 * 字符,请使用 *

+
匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。

.
匹配除换行符 \n 之外的任何单字符,要匹配 . ,请使用 .

?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?

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

\d
匹配一个数字字符。等价于 [0-9]

\D
匹配一个非数字字符。等价于 [^0-9]

\w
匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'

\W
匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]

大致先介绍这些,其他的可以自行百度

Java中Matcher的其它用法

group,用来捕获正则表达式中的组
public class RegexMatches
{
    public static void main( String args[] ){

      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(\\D*)(\\d+)(.*)";

      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);

      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
         System.out.println("Found value: " + m.group(3) ); 
      } else {
         System.out.println("NO MATCH");
      }
   }
}

如上述代码group(0)代表整个正则表达式,group(1)代表第一个括号中饭的子表达式,依次类推...

输出结果

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?

相关文章

网友评论

      本文标题:Java基础之正则表达式

      本文链接:https://www.haomeiwen.com/subject/obfgjftx.html