抛开空泛的概念,下面写出几个简单的Java正则用例:
①比如,在字符串包含验证时
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人");
boolean b= matcher.matches();
//当条件满足时,将返回tr,否则返回false
System.out.println(b);
②以多条件分割字符串时
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (int i=0;i
System.out.println(strs[i]);
}
③文字替换(首次出现字符)
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));
④文字替换(全部)
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
//替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));
⑤文字替换(置换字符)
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World ");
StringB?r sbr = new StringB?r();
while (matcher.find()) {
matcher.appendReplacement(sbr, "Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
⑥验证是否为邮箱地址
Pattern pattern = Pattern.compile("[\\w\\.\\-]+@([\\w\\-]+\\.)+[\\w\\-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
⑦去除html标记
Matcher matcher = pattern.matcher("主页");
String string = matcher.replaceAll("");
System.out.println(string);
⑧查找html中对应条件字符串
Matcher matcher = pattern.matcher("主页");
if(matcher.find())
System.out.println(matcher.group(1));
}
⑨截取http://地址
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsdsfdf");
StringB?r b?r = new StringB?r();
while(matcher.find()){
b?r.append(matcher.group());
b?r.append("\r\n");
System.out.println(b?r.toString());
}
⑩替换指定{}中文字
Pattern pattern = Pattern.compile("(http://|https://){1}[\\w\\.\\-/:]+");
Matcher matcher = pattern.matcher("dsdsdsfdf");
StringB?r b?r = new StringB?r();
while(matcher.find()){
b?r.append(matcher.group());
b?r.append("\r\n");
System.out.println(b?r.toString());
}
?以正则条件查询指定目录下文件
private ArrayList files = new ArrayList();
//用于承载文件路径
private String _path;
//用于承载未合并的正则公式
private String _regexp;
class MyFileFilter implements FileFilter {
/**
* 匹配文件名称
*/
p lic boolean accept(File file) {
try {
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return match.matches();
} catch (Exception e) {
return tr;
}
}
}
/**
* 解析输入流
* @param inputs
*/
FilesAnalyze (String path,String regexp){
getFileName(path,regexp);
}
/**
* 分析文件名并加入files
* @param input
*/
private void getFileName(String path,String regexp) {
//目录
_path=path;
_regexp=regexp;
File directory = new File(_path);
File[] filesFile = directory.listFiles(new MyFileFilter());
if (filesFile == null) return;
for (int j = 0; j < filesFile.length; j++) {
files.add(filesFile[j]);
}
return;
}
/**
* 显示输出信息
* @param out
*/
p lic void print (PrintStream out) {
Iterator elements = files.iterator();
while (elements.hasNext()) {
File file=(File) elements.next();
out.println(file.getPath());
}
}
p lic static void output(String path,String regexp) {
FilesAnalyze fileGroup1 = new FilesAnalyze(path,regexp);
fileGroup1.print(System.out);
}
p lic static void main (String[] args) {
output("C:\\","[A-z|.]*");
}
Java正则的功用还有很多,事实上只要是字符处理,就没有正则做不到的事情存在。(当然,正则解释时较耗时间就是了|||……)
String上可使用正则表达式的操作,实际上是利用了java.util.regex.Pattern与java.util.regex.Matcher的功能。当调用String的matches()方法时,实际上是调用Pattern的静态方法matches(),这个方法会返回boolean值,表示字符串是否符合正则表达式。
如果想要将正则表达式视为一个对象来重复使用,可以使用Pattern的静态方法compile()进行编译。compile()方法会返回一个Pattern的实例,这个实例代表正则表达式,之后就可以重复使用Pattern实例的matcher()方法来返回一个Matcher的实例,代表符合正则式的实例,这个实例上有一些寻找符合正则式条件的方法可供操作。范例6.11作了示范。
import java.util.regex.*;
public class UsePatternMatcher {
public static void main(String[] args) {
String phones1 =
"Justin 的手机号码:0939-100391\n" +
"momor 的手机号码:0939-666888\n";
Pattern pattern = Pattern.compile(".*0939-\\d{6}");
Matcher matcher = pattern.matcher(phones1);
while(matcher.find()) {
System.out.println(matcher.group());
}
String phones2 =
"caterpillar 的手机号码:0952-600391\n" +
"bush 的手机号码:0939-550391";
matcher = pattern.matcher(phones2);
while(matcher.find()) {
System.out.println(matcher.group());
}
}
}
范例6.11会寻找手机号码为0939开头的号码,假设号码来源不止一个(如phones1、phones2),则可以编译好正则表达式并返回一个Pattern对象,之后就可以重复使用这个Pattern对象,在比对时使用matcher()返回符合条件的Matcher实例。find()方法表示是否有符合的字符串,group()方法则可以将符合的字符串返回。程序的执行结果如下:
momor 的手机号码:0939-666888
bush 的手机号码:0939-550391
下面使用Pattern与Matcher改写范例6.9,让程序可以返回符合正则式的字符串,而不是返回不符合的字符串。
import java.util.regex.*;
public class RegularExpressionDemo2 {
public static void main(String[] args) {
String text = "abcdebcadxbc";
Pattern pattern = Pattern.compile(".bc");
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println(matcher.group());
}
System.out.println();
}
}
style='font-family:宋体'>执行结果:
abc
ebc
xbc