信手拈来 妙手偶得 » 日志 » 【原创】正则表达式进阶
【原创】正则表达式进阶
Junglesong 发表于 2008-04-05 15:06:24
通配符^
^表示模式的开始,如^he匹配所有以he开头的字符串.
例程:
String[] dataArr = { "he", "hero", "here", "hitler"};
for (String str : dataArr) {
String patternStr = "(^he)(\w*)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
}
}
通配符$
$表示模式的结束,如ia$匹配所有以ia结尾的单词.
String[] dataArr = { "ia", "Asia", "China", "Colonbia","America"};
for (String str : dataArr) {
String patternStr = "(\w*)(ia$)";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
}
}
通配符{}
除了用+表示一次或多次,*表示0次或多次,?表示0次或一次外,还可以用{}来指定精确指定出现的次数,X{2,5}表示X最少出现2次,最多出现5次;X{2,}表示X最少出现2次,多则不限;X{5}表示X只精确的出现5次.
例程:
String[] dataArr = { "google", "gooogle", "gooooogle", "goooooogle","ggle"};
for (String str : dataArr) {
String patternStr = "g(o{2,5})gle";
boolean result = Pattern.matches(patternStr, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + patternStr + "失败");
}
}
通配符[]中的-
-表示从..到…,如[a-e]等同于[abcde]
String[] dataArr = { "Tan", "Tbn", "Tcn", "Ton","Twn"};
for (String str : dataArr) {
String regex = "T[a-c]n";
boolean result = Pattern.matches(regex, str);
if (result) {
System.out.println("字符串" + str + "匹配模式" + regex + "成功");
} else {
System.out.println("字符串" + str + "匹配模式" + regex + "失败");
}
}
Pattern类的方法简述
方法
说明
static Pettern compile(String regex,int flag)
编译模式,参数regex表示输入的正则表达式,flag表示模式类型(Pattern.CASE_INSENSITIVE 表示不区分大小写)
Matcher match(CharSequence input)
获取匹配器,input时输入的待处理的字符串
static boolean matches(String regex, CharSequence input)
快速的匹配调用,直接根据输入的模式regex匹配input
String[] split(CharSequence input,int limit)
分隔字符串input,limit参数可以限制分隔的次数
模式类型Pattern.CASE_INSENSITIVE
正则表达式默认都是区分大小写的,使用了Pattern.CASE_INSENSITIVE则不对大小写进行区分.
String patternStr="ab";
Pattern pattern=Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE);
String[] dataArr = { "ab", "Ab", "AB"};
for (String str : dataArr) {
Matcher matcher=pattern.matcher(str);
if(matcher.find()){
System.out.println("字符串" + str + "匹配模式" + patternStr + "成功");
}
}
Pattern的split方法示例
注意这里要把复杂的模式写在前面,否则简单模式会先匹配上.
String input="职务=GM 薪水=50000 , 姓名=职业经理人 ; 性别=男 年龄=45 ";
String patternStr="(\s*,\s*)|(\s*;\s*)|(\s+)";
Pattern pattern=Pattern.compile(patternStr);
String[] dataArr=pattern.split(input);
for (String str : dataArr) {
System.out.println(str);
}
Matcher类的方法简述
方法
说明
boolean matches()
对整个输入字符串进行模式匹配.
boolean lookingAt()
从输入字符串的开始处进行模式匹配
boolean find(int start)
从start处开始匹配模式
int groupCount()
返回匹配后的分组数目
String replaceAll(String replacement)
用给定的replacement全部替代匹配的部分
String repalceFirst(String replacement)
用给定的replacement替代第一次匹配的部分
Matcher appendReplacement(StringBuffer sb,String replacement)
根据模式用replacement替换相应内容,并将匹配的结果添加到sb当前位置之后
StringBuffer appendTail(StringBuffer sb)
将输入序列中匹配之后的末尾字串添加到sb当前位置之后.
匹配示例一:XML元素文字解析
String regex="<(\w+)>(\w+)</\1>";
Pattern pattern=Pattern.compile(regex);
String input="<name>Bill</name><salary>50000</salary><title>GM</title>";
Matcher matcher=pattern.matcher(input);
while(matcher.find()){
System.out.println(matcher.group(2));
}
替换实例一:将单词和数字部分的单词换成大写
String regex="([a-zA-Z]+[0-9]+)";
Pattern pattern=Pattern.compile(regex);
String input="age45 salary500000 50000 title";
Matcher matcher=pattern.matcher(input);
StringBuffer sb=new StringBuffer();
while(matcher.find()){
String replacement=matcher.group(1).toUpperCase();
matcher.appendReplacement(sb, replacement);
}
matcher.appendTail(sb);
System.out.println("替换完的字串为"+sb.toString());
- » 2007年: 【转贴】表格特效整理
- » 2007年: 【整理】使用CSS隐藏和显式页面单元
- » 2007年: 【转贴】曾国藩语录
- » 2007年: 【转贴】中国古代百句经典名言
- » 2007年: 【转贴】修身格言集锦100条
- » 2007年: 【转贴】人脉存折--成功的轨迹
- » 2007年: 【转贴】英文写作佳句300例
