• JAVA基础--正则表达式


    .  any character

    d  A digit 0-9

    D  a non-digit [^0-9]

    s  a whitespace character, 空白字符

    S  a non-whitespace character

    w  a word character   [a-zA-Z0-9]

    W  a non-word character

    X规范:

    X:必须出现一次

    X?, 0,1

    X*, 0或者多次

    X+, 1, n

    X{n}, 必须出现n次

    X{n,m}, 必须出现n~m次

    X{n,}, 必须出现n次以上

    XY, X后跟着Y规范

    X|Y, X或Y规范

    (X) 捕捉组规范

    String str="1983-07-27"
    String pat="\d{4}-\d{2}-\d{2}";
    if(Pattern.compile(pat).matcher(str).matches())
    {
       System.out.println("日期格式合法");  
    }
    

    String的三个方法是支持正则的 matches, replaceAll,split

    字符串拆分, 替换, 验证:

    import java.util.regex.Pattern ;
    import java.util.regex.Matcher ;
    public class RegexDemo05{
    	public static void main(String args[]){
    		String str1 = "A1B22C333D4444E55555F".replaceAll("\d+","_") ;  //replaceAll
    		boolean temp = "1983-07-27".matches("\d{4}-\d{2}-\d{2}") ;  //matches
    		String s[] = "A1B22C333D4444E55555F".split("\d+") ;  //split
    		System.out.println("字符串替换操作:" + str1) ;
    		System.out.println("字符串验证:" + temp) ;
    		System.out.print("字符串的拆分:") ;
    		for(int x=0;x<s.length;x++){
    			System.out.print(s[x] + "	") ;
    		}
    	}
    };
    

    注意拆分 |

    import java.util.regex.Pattern ;
    import java.util.regex.Matcher ;
    public class RegexDemo07{
    	public static void main(String args[]){
    		String info = "LXH:98|MLDN:90|LI:100" ;			// 定义一个字符串
    		// 拆分的形式:
    		/*
    			LXH	-->	98
    			MLDN	-->	90
    			LI	-->	100
    		*/
    		String s[] = info.split("\|") ;
    		System.out.println("字符串的拆分:") ;
    		for(int x=0;x<s.length;x++){
    			String s2[] = s[x].split(":") ;
    			System.out.println(s2[0] + "	" + s2[1]) ;
    		}
    	}
    };
    

      

      

      

    package DAO;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    
    
    public class TestReg {
    	public static void main(String[] args) throws Exception{
    		/*System.out.println("abc".matches("..."));  //true          ctrl+shift+/ 注释
    		System.out.println("a898938593a".replaceAll("\d","-"));  //a---------a
    		Pattern p = Pattern.compile("[a-z]{3}");    //匹配具有3个字符的字符串
    		Matcher m =  p.matcher("abc");
    		System.out.println(m.matches());          //true
    		*/
    		
    		//初步认识 . * + ?, meta characters		
    		/*p("a".matches(".")); // true 
    		p("aa".matches("aa")); // true 
    		p("aaaa".matches("a*"));   // true 0或者n
    		p("aaaa".matches("a+")); // true 1或者n
    		p("aaaa".matches("a?")); // false 0或者1
    		p("".matches("a*"));    // true 0或者n
    		p("".matches("a+")); // true 1或者n
    		p("".matches("a?"));    // true 0或者1
    		p("215454545454545".matches("\d{3,100}"));    // true  3~100个
    		p("192.168.000.111".matches("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}"));           //true
    		p("192".matches("[0-2][0-9][0-9]"));  //true
    		*/
    		//范围
    		/*p("a".matches("[abc]"));       // true  []取出一个字符
    		p("a".matches("[^abc]"));       // false  []取出一个字符
    		p("A".matches("[a-zA-Z]"));       // true  []取出一个字符
    		p("A".matches("[a-z]|[A-Z]"));       // true  []取出一个字符
    		p("A".matches("[a-z[A-Z]]"));       // true  []取出一个字符
    		p("R".matches("[A-Z&&|[RFG]]"));       // true  []取出一个字符
    		*/
    		//认识 s w d
    		/*p(" 
    
    	".matches("\s{4}"));  //true  4个空白字符
    		p(" ".matches("S"));   //false  S代表非空白字符
    		p("a_8".matches("\w{3}"));  //true
    		p("abc888&^%".matches("[a-z]{1,3}\d+[&^$%]+"));  //true   1-3个字母, 1或n个数字, [&^$%]里任意1或n个
    		p("\".matches("\\"));  //正则表达式里 2个\只代表一个转义字符
    		*/
    		
    		//POSIX Style 
    		//p("a".matches("\p{Lower}"));
    		
    		//boundary
    		/*p("hello sir".matches("^h.*"));  //true
    		p("hello sir".matches(".*ir$"));  //true
    		p("hello sir".matches("^h[a-z]{1,3}o\b.*"));  //true
    		p("hellosir".matches("^h[a-z]{1,3}o\b.*"));  //true  是空格, 换行等单词边界
    		*/
    		
    		//white lines 空白行
    		//p(" 
    ".matches("^[\s&&[^\n]]*\n$"));  //true 开头是空白符, 而且不是回车, 0或n次, 后面紧跟着换行符
    		
    		
    		//practice
    		/*p("aaa 8888c".matches(".*\d{4}."));  //true  0或n个字母, 4位数字, 然后有一个字母
    		p("aaa 8888c".matches(".*\b\d{4}."));  //true  0或n个字母, 4位数字前面有个单词边界, 然后有一个字母
    		p("aaa8888c".matches(".*\d{4}."));  //true  0或n个字母, 4位数字, 然后有一个字母
    		p("aaa8888c".matches(".*\b\d{4}."));  //false  0或n个字母, 4位数字前面没有单词边界, 然后有一个字母
    		*/
    		
    		//email
    		//p("adjkfjdksjfdksfjd@djfkjdkjsfd.com".matches("[\w[.-]]+@[\w[.-]]+\.[\w]+"));  //true
    		
    		
    		//matches  find lookingAt    start  end       matches每次找整个串, find找字串, lookingAt每次都从头找
    		/*Pattern p = Pattern.compile("\d{3,5}");
    		String s = "123-34345-234-00";
    		Matcher m = p.matcher(s);
    		p(m.matches()); //把123-给吃了, 所以要reset以下. 否则, 如果不reset的话, 只有2个true 34345  234
    		m.reset();      //为了把matches吃掉的字符恢复
    		p(m.find());  //true 找一个匹配的字串 123
    		p(m.start()+"-"+m.end());  //0-3
    		p(m.find()); //true 找一个匹配的字串 34345
    		p(m.start()+"-"+m.end());  //4-9
    		p(m.find());//true找一个匹配的字串234
    		p(m.start()+"-"+m.end());  //10-13
    		p(m.find());  // false 00
    		p(m.lookingAt());  //true  只从head开始找, 所以是123
    		p(m.lookingAt());  //true  只从head开始找, 所以是123
    		p(m.lookingAt());  //true  只从head开始找, 所以是123
    		p(m.lookingAt());  //true  只从head开始找, 所以是123
    		*/
    		
    		//replacement
    		Pattern p = Pattern.compile("java",Pattern.CASE_INSENSITIVE);
    		Matcher m = p.matcher("java Java JAVa JaVa IloveJAVA you hateJava");
    		StringBuffer buf = new StringBuffer();
    		int i=0;
    		/*while(m.find()){
    			p(m.group());  //列出所有java字样的
    		}
    		*/
    		while(m.find()){
    			i++;
    			if(i%2==0){
    				m.appendReplacement(buf, "java");   //偶数都是java
    			}
    			else{
    				m.appendReplacement(buf, "JAVA");//奇数都是JAVA
    			}
    			
    		}
    		m.appendTail(buf);
    		p(buf);  //列出所有java字样的	
    		
    	}
    	public static void p(Object o){
    		System.out.println(o);
    	}
    }
    

      

  • 相关阅读:
    如何使用反射技术获取泛型类的真实类型?
    applicationContext.xml文件如何调用外部properties等配置文件
    applicationContext.xml中的使用${}是代表什么意思?
    net.sf.json.JSONException: There is a cycle in the hierarchy!错误解决方案
    MySql中LongText字段对应Hibernate映射文件的设置(转)
    ckeditor的详细配置(转)
    XML-学习
    WSDL-学习总结
    ONVIF-WSDL
    sourceinsight相关配置
  • 原文地址:https://www.cnblogs.com/wujixing/p/5379414.html
Copyright © 2020-2023  润新知