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
关注公众号:
微信赞赏
支付宝赞赏