正则表达式

来源:互联网 发布:淘宝宝贝价格下调 编辑:程序博客网 时间:2024/06/10 20:08

正则表达式也就是编程里面的一块字符串模板,也可以说是编程里面的规定的一套固定规则语法的表达式。

正则表达式的通配符(元字符):

.   :可以代表一个任意字符
          \d  :代表一个任意数字。0\1\2\3....9    digital
          \D  :代表一个任意非数字。0\1\2\3....9
          \w  :代表一个任意单词字符。 26个英文字母  word
          \W  :代表一个任意非单词字符。
          \s  :代表一个任意空白字符。空白包括空格、换行、Tab   space
          \S  :代表一个任意非空白字符
          [c-g]:范围。代表c到g的一个任意字符。
          [aeg]:枚举。代表a、e或g的一个任意字符。
          [b-dh-k]: 混合。代表b、c、d、h、i、j或k的一个任意字符。
          [b-dhmq]: 混合。代表b、c、d、h、m或q的一个任意字符。
          [^b-d]  : 取反。代表不是b、c、d的任意字符。
          [^hmq]  : 取反。代表不是h、m、q的任意字符。

 ▲ 圆括号表达形式:形成互斥

(表达式|表达式):要么是第一个、要么是第二个。

 ▲ 控制出现次数
          ? :表示被控制的字符(该符号之前的字符)出现0~1次。
            a?b:能代表ab、aab(不能)、b
   
          * :表示被控制的字符(该符号之前的字符)出现0~N次。
            a*b:能代表ab、aab、aaaaaaaaab、b


          + :表示被控制的字符(该符号之前的字符)出现1~N次。
            a+b:能代表ab、aab、aaaaaaaaab、b(不能)
         {m,n}:表示被控制的字符(该符号之前的字符)出现m~n次。
            a{2,4}b:能代表ab(不能)、aab、aaaaaaaaab(不能)、b(不能)、aaaab
         {m,}:表示被控制的字符(该符号之前的字符)至少出现m次。
         {,n}:表示被控制的字符(该符号之前的字符)最多出现n次。
         {n}:表示被控制的字符(该符号之前的字符)必须出现n次。


         推荐:可以查找别人已经写好的正则表达式。


       ▲
   ^表示开头^也匹配“\n”或“\r”之后的位置。(换行和回车)  

; $表示结尾。 $也匹配“\n”或“\r”之前的位置。


public class 验证用户输入广州座机
{
public static void main(String[] args)
{
System.out.println("请输入您的电话号码,按区号-号码的格式输入:");
Scanner sc = new Scanner(System.in);
while(sc.hasNextLine()){
String line = sc.nextLine(); // 读取下一行
// 判断该字符串是否与正则表达式匹配
if ( line.matches("020-\\d{8}") )
{
System.out.println("恭喜您,我们已经记录了您的号码");
break;
}
else
{
System.out.println("号码无效,请重新输入");
}
}
}
}



public class 验证用户输入身份证
{
public static void main(String[] args)
{
System.out.println("请输入您的身份证号:");
Scanner sc = new Scanner(System.in);
final String yearPattern = "\\d{6}((19\\d{2})|(20((0[0-9])|(1[0-6]))))";
final String monthPattern = "((0[1-9])|(1[0-2]))";
final String dayPattern = "((0[1-9])|([1-2][0-9])|(3[01]))";
String idPattern = yearPattern + monthPattern + dayPattern
+ "\\d{3}[0-9X]";


while(sc.hasNextLine()){
String line = sc.nextLine(); // 读取下一行
// 判断该字符串是否与正则表达式匹配
if ( line.matches(idPattern) )
{
System.out.println("我们已经记录了您的身份证号,请老实一点!");
break;
}
else
{
System.out.println("号码无效,请重新输入");
}
}
}
}


移动:134、135、136、137、138、139、150、151、157(TD)、158、159、187、188

联通:130、131、132、152、155、156、185、186

电信:133、153、180、189、(1349卫通)

Pattern p = Pattern.compile("^((13[0-9])|(15[^4,\\D])|(18[0,5-9]))\\d{8}$");  




0 0
原创粉丝点击