刘家姥姥

人间的真话本来就不多,一个女子的脸红胜过一大段长话。

正则表达式

整理自deerchao的正则表达式30分钟入门教程

正则表达式就是用于描述查找规则的工具。

  • \b,元字符,metacharacter。代表单词的开头或结尾。

任务:在一本英文小说里查找单词hi;

Done:\bhi\b(避免很多单词him,history等等的干扰)。

  • .*,任意数量的不包括换行的的字符。.是元字符,用于匹配除开换行符以外的任意字符;*是元字符,代表数量,表示*前面的内容可以使用任意次以使整个表达式得到匹配。

任务:查找hi后面不远处跟着一个lucy;

Done:\bhi\b.*\blucy\b

ps:限定符。+表示重复一次或更多次;?表示重复零次或一次;{n}表示重复n次;{n,}表示重复n次或更多次;{n,m}表示最少重复n次,最多重复m次。

  • \d,等同于[0-9]

任务:查找所有以0开头+两位数+“-”+八位数的字符串。

Done:0\d{2}-\d{8}

  • \w,匹配字母、数字、下划线、汉字等。在只考虑英文情况下,等同于[a-z0-9A-Z]

  • \s,匹配任意的空白符,如空格、制表符(Tab)、换行符、中文全角空格等。

  • ^匹配用来查找字符串的开头,$匹配结尾。

任务:网站要求输入的必须是5-12位的QQ号码;

Done:^\d{5,12}$

  • \,字符转义

  • 分支条件

任务,匹配以下三种格式的电话:(010)88886666,或022-22334455,或02912345678。

Done:\(?0\d{2}[) -]?\d{8},这种规则有bug。可以使用分支条件,\(0\d{2}\)\d{8}|0d{2}-d{8}|0\d{10}

ps:使用分支条件需注意条件先后顺序,如美国的邮政编码\d{4}-\d{5}|\d{5}。

  • 分组

  • 反义

\W,匹配任何不适字母、数字、下划线、汉字的字符;

\S,匹配任意不是空白符的字符,\S+,匹配不包括空白符的字符串;

\D,匹配任意不是数字的字符;

\B,匹配不是在单词开始结束的位置;

[^x],匹配出了x以外的任意字符;

[^aoeiuv],匹配出了aoeiuv这几个字母以外的任意字符。

  • 后向应用



判定字符串验证是否有数字组成。

String str = "1234567890";

if(Pattern.compile("[0-1]+").macher(str).matches()){

    System.out.println("是由数字组成!");

}else{

    System.out.println("不是由数字组成!");

}

正则表达式是在JDK1.4后引入的。

使用需要Pattern类和Matcher类,这两个类都在java.util.regex包中定义。Pattern类负责正则规范的编写,Matcher类主要负责执行,验证是否符合规范。

如验证字符串是否是合法的日期格式:

String str = "1993-08-23" ;

String pat = "\\d{4}-\\d{2}-\\d{2}" ;

Pattern p = Pattern.compile(pat) ;

Matcher m = p.matcher(str) ;

if(m.matches()){

    System.out.println("日期格式合法!");

}else{

    System.out.println("日期格式不合法!");

}

评论
©刘家姥姥 | Powered by LOFTER