Java对正则表达式的支持

可以方便地完成一些复杂的验证功能!

字母组合
[abc]         取abc的其中之一
[^abc]         不能含有abc的任一或组合
[a-zA-Z]         全部字母
[a-d[m-p]]         a到d或者m到p: [a-dm-p] (union)
[a-z&&[def]]         d, e, or f 其中之一的小写字母(intersection)
[a-z&&[^bc]]         a through z, 除了 b and c: [ad-z] (subtraction)
[a-z&&[^m-p]]         a through z, 除了 m 到 p: [a-lq-z](subtraction)

预定义字符类
.         任意字符 (may or may not match line terminators)
\d         一个数字: [0-9]
\D         一个非数字: [^0-9]
\s         一个空白符: [ \t\n\x0B\f\r]
\S         一个非空白符: [^\s]
\w         一个字母或一个下划线或一个数字: [a-zA-Z_0-9]
\W         一个非字母、下划线、数字: [^\w]

出现的次数:X表示一个正则表达式
X?         X正则表达式出现一次或没有出现
X*         X, 0次或多次
X+         X, 一次或多次,一个以上的X出现
X{n}         X, 连续出现n次,即出现的长度刚好是n
X{n,}         X, 至少连续出现n次;
X{n,m}         X, at least n but not more than m times

逻辑操作符
XY         X 正则并且 Y 正则
X|Y         要么 X 正则,要么 Y 正则
(X)         X, 作为一个规范

———-使用正则、验证:
1.需要用到 java.util.regex.Pattern;进行定义正则规范;
该类构造函数被私有了,
可以用方法:public static Pattern compile(String regex); 返回一个Pattern实例;
public Matcher matcher(CharSequence input); 返回一个Matcher类实例;
public String[] split(CharSequence input) ; 可以根据Pattern正则将所给字符串拆分!
public String pattern(); 返回使用的正则表达式;
还要用到 java.util.regex.Matcher;进行验证!
public String pattern();        //  返回使用的正则表达式
public boolean matches();        // 是否匹配
public String replaceAll(String replacement);        // 用replacement替换正则表达式
public String replaceFirst(String replacement);

————-不用正则验证,验证字符串是否由数字组成:

package com.mldn;

 

import java.util.Scanner;

 

public class StrOrNum

{

public static void main(String[] args)

{

Scanner in = new Scanner(System.in); // 可以接收标准输入

 

String str = in.next(); // 返回输入字符串

 

char[] ch = str.toCharArray(); // 转成char型数组

 

boolean flag = true; // 表示为真

 

for (int x = 0; x < ch.length; x++)

{

if (ch[x] < '0' || ch[x] > ‘9’)

{

flag = false;

break; // 退出循环

}

}

 

if (flag)

{

System.out.println(“字符串由数字组成!”);

}

else

{

System.out.println(“字符串由非数字组成!”);

}

}

}

/*

administrator@xu-desktop:~$ javac -d . work/StrOrNum.java

administrator@xu-desktop:~$ java com.mldn.StrOrNum

lkjfdslkjlksd

字符串由非数字组成!

administrator@xu-desktop:~$ java com.mldn.StrOrNum

12547895

字符串由数字组成!

administrator@xu-desktop:~$ java com.mldn.StrOrNum

125io

字符串由非数字组成!

administrator@xu-desktop:~$

可以发现很麻烦!

*/

————使用正则的验证:

package com.mldn;

 

import java.util.Scanner;

 

public class StrOrNum

{

public static void main(String[] args)

{

Scanner in = new Scanner(System.in); // 可以接收标准输入

 

String str = in.next(); // 返回输入字符串

 

if (str.matches(“\\d+”)) // 正则表达式:一个或多个数字

{

System.out.println(“字符串由数字组成!”);

}

else

{

System.out.println(“字符串由非数字组成!”);

}

}

}

/*

administrator@xu-desktop:~$ java com.mldn.StrOrNum

45789+56132548

字符串由非数字组成!

administrator@xu-desktop:~$ java com.mldn.StrOrNum

6546234234

字符串由数字组成!

可以发现简化了不少代码!

*/

——————使用Pattern类拆分字符串:

package com.mldn;

 

import java.util.regex.Pattern;

 

public class PatternDemo

{

public static void main(String[] args)

{

String str = “a1b22c333d4444e55555”; // 将按数字拆分

 

Pattern pat = Pattern.compile(“\\d+”); // 返回一个正则规范实例

 

String[] strs = pat.split(str); // 按正则规范拆分字符串,返回值为String数组

 

for (int x = 0; x < strs.length; x++)

{

System.out.print(strs[x] + ” “); // 打印拆分的字符串

}

System.out.println(“\n”);

}

}

/*

administrator@xu-desktop:~$ javac -d . work/PatternDemo.java

administrator@xu-desktop:~$ java com.mldn.PatternDemo

a b c d e

 

Pattern类主要用于定义正则规范,并按正则规范拆分字符串!

*/

————–Matcher类验证正则规范:

package com.mldn;

 

import java.util.regex.Pattern;

import java.util.regex.Matcher;

 

public class MatchDemo

{

public static void main(String[] args)

{

String str = “111-22-333”; // 定义字符串

 

String pat = “\\d{3}-\\d{2}-\\d{3}”; // 定义正则表达式

 

Pattern pattern = Pattern.compile(pat); // 定义正则规范

 

Matcher matcher = pattern.matcher(str); // 定义正则匹配

 

if (matcher.matches())

{

System.out.println(“验证匹配!” + matcher.pattern());

}

else

{

System.out.println(“验证不匹配!” + matcher.pattern());

}

}

}

/*

administrator@xu-desktop:~$ java com.mldn.MatchDemo

验证匹配!\d{3}-\d{2}-\d{3}

 

Matcher类可以按Pattern定义的正则规范进行验证字符串是否符合规范!

 

*/

————–使用Matcher替换正则表达式:

package com.mldn;

 

import java.util.regex.Pattern;

import java.util.regex.Matcher;

 

public class ReplaceDemo

{

public static void main(String[] args)

{

String str = “a1b22c333d4444e55555f666666”; // 定义字符串,将替换掉数字

 

String regex = “\\d+”; // 定义正则表达式:表示至少一个数字

 

Pattern pattern = Pattern.compile(regex); // 定义正则规范

 

Matcher matcher = pattern.matcher(str); // 定义正则匹配

 

String strReplace = matcher.replaceAll(“*”);// 替换正则表达式为自定义字符串

 

System.out.println(strReplace);

}

}

/*

administrator@xu-desktop:~$ javac -d . work/ReplaceDemo.java

administrator@xu-desktop:~$ java com.mldn.ReplaceDemo

a*b*c*d*e*f*

 

*/

—————-String类对正则的支持:
String类中有以下方法:
public boolean matches(String regex); // 是否匹配指定的正则表达式
public String replaceAll(String regex, String replacement);        // 按指定的正则表达式替换当前字符串
public String replaceFirst(String regex, String replacement);        // 替换第一次出现正则表达式的字符
public String[] split(String regex);        // 按正则表达式进行拆分字符串

——-字符串的拆分:

package com.mldn;

 

public class SplitDemo

{

public static void main(String[] args)

{

String ip = “192.168.1.112”;

 

String[] str = ip.split(“\\.”); // 注意:\是转义字符,\.表示字符’.’,\\.表示”\.”用于定义正则表达式;”.”表示任意字符;

 

for (String s : str)

System.out.print(s);

 

System.out.println(“”);

}

}

/*

administrator@xu-desktop:~$ java com.mldn.SplitDemo

1921681112

 

*/

—————-验证email地址:

package com.mldn;

 

import java.util.Scanner;

 

public class EmailMatch

{

public static void main(String[] args)

{

System.out.println(“请输入有效的email地址:”);

Scanner in = new Scanner(System.in);

 

String email = in.next(); // 接收email地址

 

String regex = “\\w+@\\w+.(com|com.cn|cn|gov|edu|net|org|中国)”; // 定义正则表达式

 

if (email.matches(regex))

{

System.out.println(“email合法!”);

}

else

{

System.out.println(“email不合法!”);

}

}

}

/*

administrator@xu-desktop:~$ java com.mldn.EmailMatch

请输入有效的email地址:

l;askjdf@a;lsfjk.bz

email不合法!

administrator@xu-desktop:~$ java com.mldn.EmailMatch

请输入有效的email地址:

sldkf@dlkf.中国

email合法!

 

*/

 

声明: 除非转自他站(如有侵权,请联系处理)外,本文采用 BY-NC-SA 协议进行授权 | 嗅谱网
转载请注明:转自《Java对正则表达式的支持
本文地址:http://www.xiupu.net/archives-78.html
关注公众号:嗅谱网

赞赏

wechat pay微信赞赏alipay pay支付宝赞赏

上一篇
下一篇

相关文章

在线留言

你必须 登录后 才能留言!