java:正则表达式

Posted 咫尺天涯是路人丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java:正则表达式相关的知识,希望对你有一定的参考价值。

* 字符串支持正则表达式的方法
* matches(String regex):将字符串与指定的正则表达式进行匹配,匹配成功返回true,否则返回false
*
* 电话号码的校验:3为区号+8位电话号码 4位区号+7位电话号码
* 010-12345678(01012345678) 021-12345678 027-12345678 029-12345678....
* 0371-1234567(03711234567)
* 网址校验:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?
* http://www.baidu.com
* http://www.baidu.com/index.html

public class TestVertify2 {
    /**
     * 校验电话号码
     * @param tel
     */
    public static boolean checkTel(String tel){
//        String regex="\\d{3,4}-?\\d{7,8}";
        String regex="((0[12]\\d{1})-?\\d{8})|(0\\d{3})-?\\d{7}";
        return tel.matches(regex);
    }
    /**
     * 校验网址:http://www.baidu.com
     * @param url
     * @return
     */
    public static boolean checkURL(String url){
        String regex="http://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?";
        return url.matches(regex);
    }
    
    /**
     * 校验QQ号码
     * @param qq
     * @return
     */
    public static boolean checkQQ(String qq){
        String regex="[1-9]\\d{4,14}";
        return qq.matches(regex);
        
    }
    public static void main(String[] args) {
//        boolean is = checkTel("021-12345678");
        boolean is = checkURL("http://www.baidu.com/index.html");
        System.out.println(is);
    }
}

* 字符串中支持正则表达式的常用方法:
* ***matches(String regex):将字符串与指定的正则表达式进行匹配,匹配成功返回true,否则返回false
* **replaceAll(String regex, String replacement)
* 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
* replaceFirst(String regex, String replacement)
* 使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
* split(String regex)
* 根据给定正则表达式的匹配拆分此字符串。

public class TestString {
    public static void testReplace(){
        String str="我是张三,我的QQ:12345,我的电话是:0371-1234567";
        String regex="\\d+";
//        str = str.replaceAll(regex, "#");
        str = str.replaceFirst(regex, "#");
        System.out.println(str);
    }
    
    public static void testSplit(){
        String str="java,html,,oracle,,,mysql,,,,javascript";
        String regex=",+";//可以匹配一次或多次逗号
        String[] strs = str.split(regex);
        for (String string : strs) {
            System.out.println(string);
        }
    }
    public static void main(String[] args) {
        testSplit();
    }
}

*ava.util.regex 包主要包括以下二个类:
Pattern 类:
pattern 对象是一个正则表达式的编译表示。
Pattern 类没有公共构造方法。要创建一个 Pattern 对象,
你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
常用的方法:
compile(String regex) 将给定的正则表达式编译到模式中。
matches(String regex, CharSequence input) 编译给定正则表达式并尝试将给定输入与其匹配。
matcher(CharSequence input) 创建匹配给定输入与此模式的匹配器。
Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。
与Pattern 类一样,Matcher 也没有公共构造方法。
你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
常用方法:
find() 尝试查找与该模式匹配的输入序列的下一个子序列。

public class TestRegex {
    public static void testPattern(){
        String content="bjsxt java is good school!";
        String regex = ".*java.*";
        boolean isMatcher= Pattern.matches(regex, content);
        System.out.println("是否包含‘java‘子字符串:"+isMatcher);
    }
    
    public static void testMatches(){
          String line = "This order was placed for QT3000! OK?";
          String regex = "(\\D*)(\\d+)(.*)";    
          //1.创建Pattern对象
          Pattern pattern = Pattern.compile(regex);
          //2.创建Mather对象
          Matcher matcher=pattern.matcher(line);
          if(matcher.find()){
             System.out.println("第一组:"+matcher.group(0));
             System.out.println("第二组:"+matcher.group(1));
             System.out.println("第三组:"+matcher.group(2));
             System.out.println("第四组:"+matcher.group(3));
          }
    }
    
    public static void main(String[] args) {
//        testPattern();
        testMatches();
    }
}

eg:

*网络爬虫:将网易主页源码上的超级链接提取出来。
*1.获取网页主页的源码
*2.使用正则表达式进行匹配源码,将超级链接提取

public class WebSipder {
    public static void main(String[] args) {
        try {
            //获取网易源码
            URL url = new URL("http://www.163.com");
            InputStream ips = url.openStream();
            InputStreamReader isr = new InputStreamReader(ips);
            BufferedReader br = new BufferedReader(isr);
            StringBuilder sb = new StringBuilder();
            String str;
            while((str=br.readLine())!=null){
                sb.append(str+"\n");
            }
//            System.out.println(sb);
            //从源码中提取网址 http://yuedu.163.com
            String regex="http://\\w*\\.*\\w*\\.com";
            //创建一个pattern对象(正则表达式)
            Pattern pattern = Pattern.compile(regex);
            Matcher matcher = pattern.matcher(sb);
            while(matcher.find()){
                String address = matcher.group();
                System.out.println(address);
            }
            br.close();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
}

 
































以上是关于java:正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

java 字符串替换

text 正则表达式片段

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性

java正则表达式去除html标签

循环通过 python 正则表达式匹配