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

正则表达式

发布时间:2020-12-13 22:10:31 所属栏目:百科 来源:网络整理
导读:正则表达式: 1.在程序开发中,经常需要匹配、查找、替换、判断字符串的情况发生。 2.以前解决这些问题是通过java.lang包中的两个重要的String。 3.如进行字符串比较的equals()方法。 4.但当处理的字符串比较复杂时,用String这种纯编码方式解决,往往会浪费
正则表达式: 1.在程序开发中,经常需要匹配、查找、替换、判断字符串的情况发生。 2.以前解决这些问题是通过java.lang包中的两个重要的String。 3.如进行字符串比较的equals()方法。 4.但当处理的字符串比较复杂时,用String这种纯编码方式解决,往往会浪费程序员的时间及精力。 正则表达式是一种可以用于模式匹配和替换的规范,能使字符串处理简单而高效。 什么是正则表达式? 正则表达式最早是由数学家Stephen Kleene于1956年提出,主要使用在字符字符串的格式比对,后来在信息领域广为应用,现在已经成为ISO(国际标准组织)的标准之一。 在API文件的java.util.regex.Pattern类中找到支持的正则表达式相关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。 一个正则表达式就是由普通的字符例如字符( a 到 z)以及特殊字符(元字符)组成的文字模式[记住它是个文字模式],它用以描述在查找文字主体时待匹配的一个或多个字符串。 正则表达式规则........................................................... .——句点符号 []——方括号符号 |——或符号 表示匹配次数的符号 ^——否符号 其他符号 1、句点符号:.句点符号是一个通配符,匹配所有字符,包括空格、Tab字符甚至换行符。 []: []里面存在某个单个字符,与我们待匹配的字符一样,就算匹配成功。 tan ten 如:t.n ------> tin 匹配都成功;t.n中间的.可由任意字符匹配,tan,ten,tin,ton都可以。 ton public static void main(String[] args) { String regex = "t.n"; //定义正则表达式regex = "t.n"; String str1 ="tan"; String str2 ="ten"; String str3 ="tin"; String str4 ="ton"; System.out.println(str1.matches(regex));//用String类的方法matches(regex)匹配,返回true System.out.println(str2.matches(regex)); System.out.println(str3.matches(regex)); System.out.println(str4.matches(regex)); } 句点优点是通用,同时缺点也是通用 为了解决句点符号匹配范围过于广泛这一问题,你可以在方括号“[]”里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。 也就是说,正则表达式“t[aeio]n”只匹配“tan”、“Ten”、“tin”和“ton”。但“Toon”不匹配,因为在方括号之内你只能匹配单个字符 。方括号表示可能出现的单个字符。 2、方括号符号 方括号“[]”里面指定看来有意义的字符。只有方括号里面指定的字符才参与匹配。 tan ten 如t[aeio]n ----> tin 匹配都成功,都返回true; ton String regex = "t[aeio]n";//“[]”内指定的字符,才可参与匹配 String str1 ="tan"; String str2 ="ten"; String str3 ="tin"; String str4 ="ton"; System.out.println(str1.matches(regex)); System.out.println(str2.matches(regex)); System.out.println(str3.matches(regex)); System.out.println(str4.matches(regex)); 句点和方括号只匹配单个字符,如果要匹配多个字符就要看或运算符——“|”。 在上例中,如果除了上面匹配的所有单词之外,你还想要匹配“toon”,那么,你可以使用“|”操作符。 “|”操作符的基本意义就是“或”运算。 3、|: 或 要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。 这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。圆括号还可以用来分组,具体请参见后面介绍。 tan ten 如:t(a|e|XXX|oo)n ------>tXXXn 匹配都成功,都返回true; toon String regex = "t(a|e|XXX|oo)n"; String str1 ="tan"; String str2 ="ten"; String str3 ="tXXXn"; String str4 ="toon"; System.out.println(str1.matches(regex)); System.out.println(str2.matches(regex)); System.out.println(str3.matches(regex)); System.out.println(str4.matches(regex)); 4、遇到单个字符的重复问题,就要看下面的符号表了。这些符号用来确定紧靠该符号左边的符号出现的次数。这些符号也被称为“贪婪量词”。 X表示字符 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次 X{n,} X,至少 n 次 X{n,m} X,至少 n 次,但是不超过 m 次 5、^ :在句前表示开头;在[]里面的表示否定。 “^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。 例如,正则表达式[^x][a-z]+,是要匹配所有单词,但以“X”字母开头的单词除外。 如:String regex = "t[^aeio]n";要匹配t.n但中间字符不能是aeio。 应用小案例: 1、身份证号码验证:(15位,18位) String regex="d{15}|d{18}|d{17}X"; //d{15}表示要匹配数字,重复出现15次 2、一个月天数: String regex="(0?[1-9])|(1|2)[0-9]|30|31"; 3、假设我们要在文本文件中搜索美国的社会安全号码。号码的格式是999-99-9999 正则表达式:[0-9]{3} -[0-9]{2} - [0-9]{4} //[0-9]{3} 表示0-9任意数重复出现3次 ..................................................................................... 在String类中,matches()方法可以让您验证字符串是否符合指定的正则表达式,这通 常用于验证使用者输入的字符串数据是否正确,例如电话号码格式。 除此之外,还有在API文件的java.util.regex.Pattern类中找到支持的正则表达式相 关信息,可以将正则表达式应用于字符串的比对、取代、分离等动作上。 String上可使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与 java.util.regex. Matcher的功能。当调用String的matches()方法时,实际上是 调用Pattern的静态方法matches(),这个方法会返回boolean值,表示字符串是否 符合正则表达式。 如果想要将正则表达式视为一个对象来重复使用,可以使用Pattern的静态方法compile()进行编译。 compile()方法会返回一个Pattern的实例,这个实例代表正则表达式,之后就可以重复使用Pattern实例的matcher()方法来返回一个Matcher的实例。 String regex = "d+"; String str = "22aa222"; Pattern p = Pattern.compile(regex);//返回一个Pattern的实例,这个实例代表正则表达式 Matcher m = p.matcher(str); System.out.println(m.matches());

(编辑:李大同)

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

    推荐文章
      热点阅读