正则表达式

来源:互联网 发布:it招标文件 编辑:程序博客网 时间:2024/05/16 09:40

正则表达式主要用于对字符串的处理,主要用于字符串的匹配,分割,替换

规则:(我自己总结的)

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,恰好 nX{n,}X,至少 nX{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>();//获取PatternPattern p=Pattern.compile(regex);//获取MatcherMatcher 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);}}