Java 正则表达式

来源:互联网 发布:php java 比较 编辑:程序博客网 时间:2024/05/30 05:09

正则表达式

http://www.runoob.com/regexp/regexp-syntax.html
http://blog.csdn.net/allwefantasy/article/details/3136570/

正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

正则表达式是由普通字符(例如字符 a 到 z)以及特殊字符(称为”元字符”)组成的文字模式。
这里写图片描述
这里写图片描述

重要标示符

  1. 句点符号“.”:匹配所有单个字符,包括空格、Tab字符甚至换行符。如:t.n 匹配 tan,tin,t*n,tpn,t n 等等
  2. 方括号“[]”限定范围的但个字符。为了解决句点符号匹配范围过于广泛这一问题,以在方括号里面指定看来有意义的字符。此时,只有方括号里面指定的字符才参与匹配。如“t[aeio]n”只匹配tan,ten,tin,ton。
  3. “或”符号“|”:要匹配“toon”,使用“t(a|e|i|o|oo)n”正则表达式。这里不能使用方扩号,因为方括号只允许匹配单个字符;这里必须使用圆括号“()”。
  4. 匹配次数:表示匹配次数的符号用来确定紧靠该符号左边的符号出现的次数。这里写图片描述
    这里写图片描述
    1. “否”符号“^”:“^”符号称为“否”符号。如果用在方括号内,“^”表示不想要匹配的字符。例如,图四的正则表达式匹配所有单词,但以“X”字母开头的单词除外。
    2. 代替符号:\d 表示[0-9],\D 表示非数字 [^0-9],\w 表示 字母或数字 [A-Z0-9],同理 \W 表示 [^A-Z0-9],\s 空白字符 [\t\n\f]。如:\d{3} - \d{2} - \d{4}

常用正则表达式

  • 电子邮箱: “^\s*\w+(?:\.{0,1}[\w-]+)@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)\.[a-zA-Z]+\s*$”
  • 手机号码: “(86)*1[3|5|4|7|8]\d{9}”
  • 身份证号码: (\d{17}[0-9|X])|(\d{15})
  • …….

java 正则表达式

Java 中从 JDK 1.4 开始增加了对正则表达式的支持,至此正则表达式成为了 Java 中的基本类库,使用时不需要再导入第三方类库。

程序员7种基本技能是:数组,字符串与哈希表、正则表达式、调试、两门语言、一个开发环境、SQL 语言和编写软件的思想

包库

  • 包:java.util.regex
  • 类:java.util.regex包主要由3个类组成:Pattern、Matcher和PatternSyntaxException
  • Pattern:Pattern 对象表示一个已编译的正则表达式。Pattern 类没有提供公共的构造方法。要构建一个模式,首先必须调用公共的静态 compile 方法,它将返回一个 Pattern 对象。
  • Matcher 是一个靠着输入的字符串来解析这个模式和完成匹配操作的对象。与 Pattern 相似,Matcher 也没有定义公共的构造方法,需要通过调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
  • PatternSyntaxException 对象是一个未检查异常,指示了正则表达式中的一个语法错误。

代码

  • 分析:一个Matcher对象是一个状态机器,它依据Pattern对象做为匹配模式对字符串展开匹配检查。首先一个Pattern实例订制了一个所用语法与 PERL的类似的正则表达式经编译后的模式,然后一个Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
package xianggen.regex;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * RegexTest.java * @author xianggen * @date 2016年7月21日 上午9:13:20 */public class RegexTest {    public static void main(String[] args) {        String str=null;        Scanner scan=new Scanner(System.in);        while(scan.hasNext()){            str=scan.nextLine();            if(isPhoneNumber(str)){                System.out.println("A phoneNumber!");            }else{                System.out.println("Not a phhoneNumber!");            }            if(isMail(str))                System.out.println("A emal!");            else                System.out.println("Not a emal!");        }    }    /**     *  简单移动电话号码测试     * @param str     * @return     */    public static boolean isPhoneNumber(String str){        String regex="^1[3|5|4|7|8]\\d{9}";        Pattern pattern=Pattern.compile(regex);        Matcher match=pattern.matcher(str);        if(match.find()){            return true;        }else{            return false;        }    }    /**     * 简单邮箱测试     * @param str     * @return     */    public static boolean isMail(String str){        //My version        String regex="^[0-9a-zA-Z|_]{6,}@[0-9a-zA-Z]{2,}\\.[com|cn]";        //参考网上,比较        String emailRegex="^\\s*\\w+(?:\\.{0,1}[\\w-]+)*@[a-zA-Z0-9]+(?:[-.][a-zA-Z0-9]+)*\\.[a-zA-Z]+\\s*$" ;        Pattern pattern=Pattern.compile(emailRegex);        Matcher match=pattern.matcher(str);        if(match.find()){            return true;        }else{            return false;        }    }    public static void simpleMatch(String str){        //直接调用Pattern的静态方法matches        boolean result=Pattern.matches("java",str);         //String对象直接调用matches方法!!!        str.matches("xianggen@qq.com!");    }}
0 0
原创粉丝点击