您的位置:首页 > 其它

正则表达式

2013-05-09 22:55 211 查看
正则表达式主要用于对字符串的处理,主要用于字符串的匹配,分割,替换

规则:(我自己总结的)

1:按照括号

 ()表示分组,(.)\1意思是第二个字符与第一个字符一致

   [ ] 表示可选,[134]意思1,3,4中任意一个 
[a-z]意思是a,b....z中的任意一个

  
{ }表示边界    {4}上下边界都是4,必须四个字符,{4,}至少4个,{4,6} 4到6个,与前边的组合使用比如:

[0-9]{4,8}
表示4到8个数

2:按照+ * ?

X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次
3:按照转义字符\
预定义字符类

\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]
\b单词边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾
以下代码是对正则表达式的运用

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {
/*
* 1
* 字符匹配
*/
System.out.println(testMatches("12345323", "1\\d{4,14}"));
System.out.println(testMatches("22345323", "1\\d{4,14}"));
System.out.println(testMatches("22345323", "[125]\\d{4,14}"));

/*
* 2
* 字符截取
*/
String str = "c:\\java\\test";
String[] strs = testSprite(str, "\\\\");//\\借钱去,\是转义字符,要转义一个\,需要\\,两个\\\\
for (String newstr : strs) {
System.out.println(newstr);
}

str = "c.java.test";
strs = testSprite(str, "\\.");//。截取。 .代表所有字符
for (String newstr : strs) {
System.out.println(newstr);
}

str = "c java test 22";//空格截取,可能多个空格,所以" +"
strs = testSprite(str, " +");
for (String newstr : strs) {
System.out.println(newstr);
}

str = "dwadadw222a2xxaddawddwadq3aseaa";//叠词截取()分组,1表示第一组,需要转义,所以\1,(.)的意思是第二个字符跟第一个字符一致
strs = testSprite(str, "(.)\\1+");
for (String newstr : strs) {
System.out.println(newstr);
}

/*
* 3
* 字符替换
*/
str="I a2m haa23pp55y";
System.out.println(testreplaceAll(str, "\\d", ""));

str="A beeeautttiful ggirll that I wwant ttoo bee myy ggiiirl frrieeend may coome too minee unniverssity";
System.out.println(testreplaceAll(str, "(.)\\1+", "$1"));

/*
* 获取能匹配的字符
*/
List<String> list=testFind("After two days , ACM compition will be go","\\b[a-zA-z]{3}\\b");//必须是三个字符,前后两边是单词字符
Iterator it=list.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}

}
//Matcher是真正的强大
public static LinkedList<String> testFind(String str,String regex)
{
LinkedList<String> list=new LinkedList<String>();
//获取Pattern
Pattern p= Pattern.compile(regex);
//获取Matcher
Matcher m=p.matcher(str);
while(m.find())
{
list.add(m.group());
}
return list;

}
public static boolean testMatches(String str, String regex) {

return str.matches(regex);
}

public static String[] testSprite(String str, String regex) {

return str.split(regex);
}

public static String testreplaceAll(String str, String regex,
String replacement) {
return str.replaceAll(regex, replacement);
}

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