zoukankan      html  css  js  c++  java
  • Java的正则表达式

    package RegexTest;
    
    /**
     * Created by hu on 2016/3/29.
     */
    /*
    * Java的正则表达式
        在正则表达式中,用d表示一位数字,如果在其它语言中使用过正则表达式,
        就会发现Java对反斜线的不同处理。在其它语言中\表示"想要在正则表达式中
        插入一个普通的(字面上的)反斜线,请不要给它任何意义"。
        而在Java中\的意思是"想要插入一个正则表达式的反斜线,
        所以其后面的字符具有特殊的意义"。例如,想要表达一位数字,
        那么正则表达式应该为\d。如果想要插入一个普通的反斜线,则应该是\\。
        不过换行和制表符之类的东西只需要使用单反斜线:
    	
    * */
    public class IntegerMatch {
        public static void main(String[] args){
            /*
            *如果想要表达“一个或多个之前的字符”,应该使用"+"
            *“前面可能有一个负号”,使用"-?",故?的意思是可能有也可能没有
            * \d表示后面跟的是数字
            * */
            System.out.println("-1234".matches("-?\d+"));
            System.out.println("5678".matches("-?\d+"));
            System.out.println("+911".matches("-?\d+"));
            //因为"+"在正则表达式中有特殊的意义,所以将其转义
            System.out.println("+911".matches("(-|\+)?\d+"));
        }
    }
    

      

    package RegexTest;
    
    import java.util.Arrays;
    
    /**
     * Created by hu on 2016/3/29.
     */
    /*
    * String类自带了一个非常有用的正则表达式工具,split()方法,其功能是“将字符串从正则表达式匹配的地方切开”
    * */
    public class Splitting {
        public static String knights="Then, when you have found the shrubbery, you must "
                +"cut down the mightiest tree in the forest... "+"with ... a herring!";
        public static void split(String regex){
            System.out.println(Arrays.toString(knights.split(regex)));
        }
        public static void main(String[] args){
            //按照空格来划分字符串
            split(" ");
            //W的意思是非单词字符,w则表示一个单词字符
            split("\W+");
            //字母n后面跟着一个或多个非单词字符
            split("n\W+");
        }
    }
    

     

    package RegexTest;
    
    /**
     * Created by hu on 2016/3/29.
     */
    /*
    * String.split()还有一个重载的版本,它允许限制字符串分割的次数
    * String类自带的最后一个正则表达式工具是替换。你可以只替换正则表达式第一个匹配的子串,或是替换所有匹配的地方。
    * */
    public class Replacing {
        public static String knights="Then, when you have found the shrubbery, you must "
                +"cut down the mightiest tree in the forest... "+"with ... a herring!";
        public static void main(String[] args){
            //只替换第一个符合条件的子串,匹配以字母f开头,后跟多个字符
            System.out.println(knights.replaceFirst("f\w+","located"));
            //替换所有符合条件的子串
            System.out.println(knights.replaceAll("shrubbery|tree|herring","banana"));
        }
    }
    

      创建正则表达式:

         

    这只是常用的一部分

     

    package RegexTest;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * Created by hu on 2016/3/29.
     */
    /*
    * 比起功能有限的String类,本人更喜爱构造更能强大的正则表达式对象。只需要导入java.util.regex包,
    * 然后使用static Pattern.compile()方法来编译自己的正则表达式即可,它会根据String类型的正则表达式生成
    * 一个Pattern对象,接下来把想要匹配的字符串输入到Pattern对象的matcher()方法。matcher()方法会生成一个Matcher
    * 对象。
    * */
    public class TestRegularExpression {
        public void testRegularExpression(String regex,String matchStr){
            Pattern pattern=Pattern.compile(regex);
            Matcher matcher=pattern.matcher(matchStr);
            while (matcher.find()){
                System.out.println("Match ""+ matcher.group()+""at position "+ matcher.start()+"-"+ (matcher.end()-1));
            }
        }
    }
    

      

    package RegexTest;
    
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * Created by hu on 2016/3/29.
     */
    public class Finding {
        public static void main(String[] args){
            Matcher m= Pattern.compile("\w+").matcher("Evening is full of the linnet's wings");
            while (m.find()){//find()像迭代器那样前向遍历输入的字符串
                System.out.print(m.group() + " ");
            }
            System.out.println();
            int i=0;
            while (m.find(i)){//该find能够接收一个整数作为参数,该整数表示字符串中字符的位置,并以其作为搜索的起点。
                System.out.print(m.group() + " ");
                i++;
            }
        }
    }
    

      其结果如下:

  • 相关阅读:
    Scala中隐式转换(implicit conversion)的优先顺序
    protege4.0使用中的理论
    国外程序员整理的 C++ 资源大全
    什么是本体论?
    深入分析C++引用
    在基于对话框的MFC程序中,使程序在任务栏中不显示图标
    PhoneGap搭建运行环境(3.2版本)
    [JS代码]如何判断ipad或者iphone是否为横屏或者竖屏
    windwos iis 7.5 使用html 报405错误
    NodeJs 开源
  • 原文地址:https://www.cnblogs.com/hujingwei/p/5333903.html
Copyright © 2011-2022 走看看