您的位置:首页 > 编程语言 > Java开发

Java使用正则表达式——实例

2014-05-20 23:43 447 查看

一、正则表达式的知识要点

1、正则表达式是什么?

正则表达式是一种可以用于模式匹配和替换的强有力的工具。

2、正则表达式的优点?

更少的代码,更高的效率。

3、正则表达式如何使用?

在下面的教程中我们将学习到正则表达式的用法。

二、正则表达式的各种符号及其含义

常用符号

.表示任意一个字符
\s空格字符(空格键, tab, 换行, 换页, 回车)
\S非空格字符([^\s])
\d一个数字,(相当于[0-9] )
\D一个数字,(相当于[^0-9] )
\w一个单词字符(word character) (相当于 [a-zA-Z_0-9] )
\W一个非单词的字符,[^\w]
\b一个单词的边界
\B一个非单词的边界
\G前一个匹配的结束
^表达式的开始
$表达式的结尾
[ ] 匹配方括号内的一个字符
例如:[abc] 表示字符a,b,c中的任意一个(与a|b|c相同) [a-zA-Z] 表示从a到z或A到Z当中的任意一个字符

表示次数的符号

* 重复零次或更多次
例如:a* 匹配零个或者多个a
+ 重复一次或更多次
例如:a+ 匹配一个或者多个a
重复零次或一次
例如:a? 匹配零个或一个a
{n} 重复n次
例如:a{4} 匹配4个a
{n,} 重复n次或更多次
例如:a{4,} 匹配至少4个a
{n,m} 重复n到m次
例如:a{4,10} 匹配4~10个a
三、正则表达式实例
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现

1、首先引入java包:java.util.regex
2、使用方法如下:
共分三步:
①构造一个模式. Pattern p=Pattern.compile("[a-z]*");
②建造一个匹配器 Matcher m = p.matcher(str);
③进行判断,得到结果boolean b = m.matches();

Matcher类提供三个匹配操作方法,三个方法均返回boolean类型,当匹配到时返回true,没匹配到则返回false
①m.matches() matches()对整个字符串进行匹配,只有整个字符串都匹配了才返回true
②m.lookingAt() lookingAt()对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
③m.find() find()对字符串进行匹配,匹配到的字符串可以在任何位置

四、实例
①字符匹配

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m.matches(); //返回是否匹配的结果

System.out.println(b);



Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(str); // 操作的字符串

boolean b = m. lookingAt (); //返回是否匹配的结果

System.out.println(b);



Pattern p = Pattern.compile(expression); // 正则表达式


Matcher m = p.matcher(str); // 操作的字符串

boolean b = m..find (); //返回是否匹配的结果

System.out.println(b);


②分割字符串

Pattern pattern = Pattern.compile(expression); //正则表达式

String[] strs = pattern.split(str); //操作字符串 得到返回的字符串数组


③替换字符串
Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(text); // 操作的字符串

String s = m.replaceAll(str); //替换后的字符串


④查找替换指定字符串

Pattern p = Pattern.compile(expression); // 正则表达式

Matcher m = p.matcher(text); // 操作的字符串

StringBuffer sb = new StringBuffer();

int i = 0;

while (m.find()) {

m.appendReplacement(sb, str); i++; //字符串出现次数 }

m.appendTail(sb);//从截取点将后面的字符串接上
String s = sb.toString();


五、正则表达式 ==》例子
1.验证身份证号、手机号、座机号格式是否正确

<span style="color:#ff0000;">import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class shixun7 {
/**
* 验证身份证号、手机号、座机号格式是否正确(可以采用正则表达式验证)
*
* @param args
*/
static Pattern p = null; // 正则表达式
static Matcher m = null; // 操作的字符串
static boolean b = false; // 布尔值
public static void main(String[] args) {
for (int i = 1; i > 0; i++) {
Scanner input = new Scanner(System.in);
System.out.print("请输入身份证:");
String id = input.next();
System.out.print("请输入手机号:");
String sjh = input.next();
System.out.print("请输入座机号:");
String zjh = input.next();
if (yanzhengID(id) && yanzhengsjh(sjh) && yanzhengzjh(zjh)) {
System.out.println("注册成功!");
break;
}
}
}
// 验证座机号
private static boolean yanzhengzjh(String zjh) {
p = Pattern.compile("\\d{4}+-+\\d{7}");
m = p.matcher(zjh);
b = m.matches();
if (b == false) {
System.out.println("座机号区号必须为4位,电话号码必须是七位!");
return false;
}
return true;
}
// 验证手机号
private static boolean yanzhengsjh(String sjh) {
p = Pattern.compile("^[1]+\\d{10}");
m = p.matcher(sjh);
b = m.matches();
if (b == false) {
System.out.println("手机号必须是十一位!");
return false;
}
return true;
}
// 验证身份证
public static boolean yanzhengID(String id) {
p = Pattern.compile("\\d{16}|\\d{18}");
m = p.matcher(id);
b = m.matches();
if (b == false) {
System.out.println("身份证号必须是十六位或十八位!");
return false;
}
return true;
}
}</span>
<strong><span style="font-size:32px;">2.验证Email</span></strong>
<pre name="code" class="java"><pre name="code" class="java" style="font-size:32px; color: rgb(255, 0, 0); font-weight: bold;">import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false;
// 正则表达式表示邮箱号码
p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
m = p.matcher("user@test.com");
b = m.matches();
System.out.println("email号码正确:" + b); // 输出:true
//
p = Pattern.compile("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");
m = p.matcher("user.test.com");// 错误 @应为.
b = m.matches();
System.out.println("email号码错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}
<span style="color:#330000;"><strong>3.验证是否是中文名</strong></span>
<pre name="code" class="java" style="font-weight: bold;font-size:32px;"><span style="color:#ff0000;">import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false;
// 正则表达式表示汉字的一串字符串
p = Pattern.compile("^[\u4e00-\u9fa5]+$");
m = p.matcher("貂禅");
b = m.matches();
System.out.println("中文名正确:" + b); // 输出:true
//正则表达式表示汉字的一串字符串
p = Pattern.compile("^[\u4e00-\u9fa5]+$");
m = p.matcher("nick");// 错误 只能是中文
b = m.matches();
System.out.println("中文名错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}</span>
<span style="font-size:32px;color:#330000;"><strong>4.验证IP地址</strong></span>
<span style="font-size:32px;"><strong></strong></span><pre name="code" class="java"><span style="color:#ff0000;">import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 验证IP
* @author caiyu
*
*/
public class Test2 {
static void test() {
Pattern p = null; // 正则表达式
Matcher m = null; // 操作的字符串
boolean b = false; // 正则表达式表示邮箱号码
p = Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");
m = p.matcher("192.168.1.1");
b = m.matches();
System.out.println("IP正确:" + b); // 输出:true
//
p = Pattern.compile("\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}+\\.\\d{1,3}");
m = p.matcher("192.168.1.1234");// 错误 应该为3位不应该是4位
b = m.matches();
System.out.println("IP错误:" + b); // 输出:false
}
public static void main(String argus[]) {
test();
}
}</span>
<span style="color:#660000;">六、感悟</span>
<span style="color:#660000;">1.通过以上的学习,大家可能对正则表达式有了初步的了解和认识,大家在以后的学习和工作中逐渐加深对Java正则表达式的理解,一定会在编程的过程中起到很大作用</span>
<span style="color:#660000;">2.使用正则表达式可以减少代码量,可以不用一个一个的去判断字符是否符合。</span>





                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: