正则表达式
一、字符解释
1、^为限制开头
^java :条件限制为 java 为开头的字符。
2、$为限制结尾
java$ :条件限制为以 java 为结尾符。
3、
将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“n”匹配n。“n”匹配换行符。序列“”匹配“”而“(”则匹配“(”。
4、?
匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“does”中的“do”。?等价于{0,1}。
5、*
匹配前面的子表达式零次或多次(大于等于0次)。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。
6、+
匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
7、{n}
n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
8、点.
匹配除“rn”之外的任何单个字符。要匹配包括“rn”在内的任何字符,请使用像“[sS]”的模式。
9、x|y
匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
10、[^abc]
负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
11、[a-z]
字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.
12、b 能匹配一个单词的边界,例如 erb 能匹配到nerver的er,但不能匹配“verb”中的“er”。
13、B
匹配非单词边界。“erB”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
14、d
匹配一个数字字符,相当于[0-9]
15、D
匹配一个非数字字符,相当于[^0-9]
16、w
匹配包括下划线的任何单词字符。等价于“[A-Za-z0-9_]”。
17、W
匹配任何非单词字符。等价于“[^A-Za-z0-9_]
18、|
将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
19、( )
将 ( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 1 到9 的符号来引用。
20、s
匹配任何空白字符,包括空格、制表符、换页符等等。等价于[ fnrtv]。
21、S
匹配任何非空白字符。等价于[^ fnrtv]。
22、f
匹配一个换页符。
23、n
匹配一个换行符
24、r
匹配一个回车符
◆ 比如,在字符串包含验证时
// 查找以 Java 开头,任意结尾的字符串
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java 不是人 ");
boolean b= matcher.matches();
// 当条件满足时,将返回 true ,否则返回 false
System.out.println(b);
◆ 以多条件分割字符串时
Pattern pattern = Pattern.compile("[,|]+");
String[] strs = pattern.split("Java Hello World Java,Hello,World|Sun");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
◆ 文字替换(首次出现字符)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World");
// 替换第一个符合正则的数据
System.out.println(matcher.replaceFirst("Java"));
◆ 文字替换(全部)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World");
// 替换第一个符合正则的数据
System.out.println(matcher.replaceAll("Java"));
◆ 文字替换(置换字符)
Pattern pattern = Pattern.compile(" 正则表达式 ");
Matcher matcher = pattern.matcher(" 正则表达式 Hello World,正则表达式 Hello World ");
StringBuffer sbr = new StringBuffer();
while (matcher.find()) {
matcher.appendReplacement(sbr,"Java");
}
matcher.appendTail(sbr);
System.out.println(sbr.toString());
◆ 验证是否为邮箱地址
String str="ceponline@yahoo.com.cn";
Pattern pattern = Pattern.compile("[w.-]+@([w-]+.)+[w-]+",Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.matches());
◆ 去除 html 标记
Pattern pattern = Pattern.compile("<.+?>",Pattern.DOTALL);
Matcher matcher = pattern.matcher("<a href="index.html"> 主页 </a>");
String string = matcher.replaceAll("");
System.out.println(string);
◆ 查找 html 中对应条件字符串
Pattern pattern = Pattern.compile("href="(.+?)"");
Matcher matcher = pattern.matcher("<a href="index.html"> 主页 </a>");
if(matcher.find())
System.out.println(matcher.group(1));
}
◆ 截取 http:// 地址
// 截取 url
Pattern pattern = Pattern.compile("(http://|https://){1}[w.-/:]+");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
buffer.append(matcher.group());
buffer.append("rn");
System.out.println(buffer.toString());
}
◆ 替换指定 {} 中文字
String str = "Java 目前的发展史是由 {0} 年 -{1} 年 ";
String[][] object={new String[]{"{0}","1995"},new String[]{"{1}","2007"}};
System.out.println(replace(str,object));
public static String replace(final String sourceString,Object[] object) {
String temp=sourceString;
for(int i=0;i<object.length;i++){
String[] result=(String[])object[i];
Pattern pattern = Pattern.compile(result[0]);
Matcher matcher = pattern.matcher(temp);
temp=matcher.replaceAll(result[1]);
}
return temp;
}
◆ 以正则条件查询指定目录下文件
// 用于缓存文件列表
private ArrayList files = new ArrayList();
// 用于承载文件路径
private String _path;
// 用于承载未合并的正则公式
private String _regexp;
class MyFileFilter implements FileFilter {
/**
* 匹配文件名称
*/
public boolean accept(File file) {
try {
Pattern pattern = Pattern.compile(_regexp);
Matcher match = pattern.matcher(file.getName());
return match.matches();
} catch (Exception e) {
return true;
}
}
}
/**
* 解析输入流
* @param inpu
/* 主要是为了能找出在一次匹配中你更关心的部分。
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 "(x)(yw*)(z)" 中,存在三个这样的组:
1. x
2. yw*
3. z*/
//m.group(2) return y123 y456
//m.group() return xy123z xy456z
@Test
public void test3(){
String regex = "(x)(yw*)(z)";
String input = "exy123z,xy456z";
Pattern p = Pattern.compile(regex,Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(input);
while (m.find()) {
// System.out.println(m.group(2));
// System.out.println(m.groupCount());
System.out.println(m.group());
}
}
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|