正则表达式——java

正则表达式——java

  1. 什么是正则表达式?

    记录文本规则的代码。精确描述出我们对于字符串的特殊需求。


    例如:电话号码 010-12345678 010-87654321 有什么相似之处?

    ​ 它们的相似之处就是形式都是像这样 XXX-XXXXXXXX(X为数字)

    在一段段纷繁复杂的文字中,我们可不可以只把电话号码筛选出来呢?利用正则表达式,我么可以轻松做到。


    为了方便学习,在学习的过程中你可以通过[在线正则表达式测试系统](http://tool.oschina.net/regex/进行测试来看看你的正则表达式是否正确。

  2. 常用正则表达式符号

    正则表达式的符号有很多,

    (1) 首尾匹配​:^ 和$

    ^表示开始:“abc12" 和 ”^abc" 匹配

    $表示结束:“12abc" 和 "abc$” 匹配

    当然 “abc"既能和"abc12",也能和"12abc"匹配.

    那猜猜”^abc$"呢?

    那就只能和"abc"匹配了。

    (2) 字符匹配次数 * + ? {}

    “ab*”: *表示没有或者更多 如可以与 abc , ac ,abbbbbbbbddd匹配

    “ab+”:+表示一个或者多个 可以与abc,abbbbbbbbbccccc,但不能与ac匹配

    ”ab?": 表示一个或者0个

    注意区分:”ab" 与"ab+",当同时与 abbb匹配时,“ab"匹配结果是ab,但"ab+“匹配结果是"abbb”

    那要是有确定的匹配次数怎么办?

    比如我要找电话号码,我们知道是3个数字+‘_’+8个数字,这里我们就能用到**{}**来匹配了。

    b{3}表示b匹配3次,b{3,5}表示b匹配3-5次(包含端点),b{3,}表示3次及以上,注意正则表达式不能不设下限,如b{,4}是错误的。

    (3) 或者 | []

    [ab]:a或者b

    (b|cd)e: be或者cde都能匹配上

    (b|cd)*e:表示b,cd 任意混合加上e都能匹配

    中划线-与[ ]同用可以指定范围

    [a-z]:a到z

    [0-9]:0到9

    [a-zA-Z0-9]$ :以字母或者数字结尾

    [^a-z]:除了a-z之外的字符

    ^()${}|等有意义的字符要表示本身需要在前面加上\表示转义

    (4) .可以代替任意字符

  3. 特殊符号

    \w:[a-zA-Z0-9]

    \W:与\w相反

    \d:[0-9]

    \D:与\d相反

  4. java中正则表达式的使用

    我们先上例子

    这里我们匹配像{{1,2},{3,4}}的字符串

    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class regx {
        public static void main( String args[] ){
            // 按指定模式在字符串查找
            String line = "{{+1,2}, {3,4}";
            line=line.replace(" ","");
            String pattern = "^[{][{][+-]?\\d+[,][+-]?\\d+[}][,][{][+-]?\\d+[,][+-]?\\d+[}][}]$";
            // 创建 Pattern 对象
            Pattern r = Pattern.compile(pattern);
            // 现在创建 matcher 对象
            Matcher m = r.matcher(line);
            int i = 0;
            if (m.find( )) {
                System.out.println(m.group());
            }
            else
            {
                return;
            }
        }
    }
    

    框架:

    pattern =" "
    Pattern r=Pattern.compile(pattern)
    Matcher m = r.matcher(ori_str)
    if(m.find())
    	......
    \\用while(m.find())可以实现不断的向后匹配
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值