精华内容
下载资源
问答
  • 正则表达式循环匹配

    2018-08-01 15:39:00
    正则有一个最大的好处就是效率高,对于一些复杂的字符串匹配的问题,如果用原生原生API解决比较繁琐,可以考虑用正则表达式来匹配。 这几天正在研究正则的循环匹配的问题,分享出来看看。 分组实现循环匹配 正则...

    正则有一个最大的好处就是效率高,对于一些复杂的字符串匹配的问题,如果用原生原生API解决比较繁琐,可以考虑用正则表达式来匹配。

    这几天正在研究正则的循环匹配的问题,分享出来看看。

    分组实现循环匹配

    正则表达式中的分组是一个很重要的功能,有了它,我们可以进行分组的查询替换操作,下面是例子?

    var reg = /(abc|hij)/g;
    "abcdefghij".replace(reg,"-");
    //它会匹配分组里面的abc或hij 替换成-,输出结果 :-defg-

    当正则表达式中有分组时,JS正则引擎实现了一个 美元符号+数字 ($1,$2.$3 … )按顺序匹配对应到的分组。

    var reg = /(abc)(def)/g
    "abcdef".replace(reg,"$2$1")
    "defabc"
    //这个例子就是abc->$1 def->$2 ,然后把匹配的分组替换了。

    再进一步,如果分组中存在多个匹配(贪婪模式)时,光写$1,$2..就满足不了需求了。

    举个例子:银行卡四位空格的处理

     var reg = /(\d{4})+?/g
    "6226600000000001".replace(reg,"$1 ")
    /*
     这个$1匹配的是对应的循环出来的分组 不仅仅是第一分组,在这里的含义就是循环出来的每一个分组
    "6226 6000 0000 0001"
    */

    也就是说,如果正则想对贪婪模式的分组做处理时,譬如说替换,插入等操作时。 $1 就代表每次循环出来的分组


    记一些正则比较冷门的知识。

    //把相同的字符区分开来 aabbcccdddd -> "aa bb ccc dddd"
    "aaabbcccdddd".match(/([a-z])\1+/g)  
    //输出:["aaa", "bb", "ccc", "dddd"]
    //\n -> "斜杠后面带数字意味着相同的字符连续匹配n次,如果是连续匹配2次就是 \1 两次以上就是 \1+" 

    后向先行断言 (匹配到字符串后面的位置)

    按上面的银行卡四位空格的的要求:我们写下如下的正则表达式

    "1111222233334444".replace(/(?<=(^(\d{4})+))(?<!$)/g," ")

    后向先行断言概念:?<= 这个api 是匹配后面位置的 就是说 匹配到所在字符的后面位置。

    举个例子:

    //aaabbbccc 需要匹配aaa 后面的所有内容
    "aaabbbccc".match(/(?<=aaa).+/g)

    上面的银行卡四位空格的 可以分步骤来分析。

    • 第一步:先得出第一个空格 /(?<=^(\d{4}))/ 得出来:1111 222233334444
    • 第二步:得出其他的空格,也就是分组多加个+ 号 进行贪婪匹配,并且全局搜索匹配 (?<=(^(\d{4})+))/g
    • 第三步:我们发现最末尾的也会多出来空格,这个空格是我们不想看到的。所以最后的末尾我们不去匹配。/(?<=(^(\d{4})+))(?<!$)/g

    转载于:https://www.cnblogs.com/qujun/p/9401588.html

    展开全文
  • Java正则表达式循环匹配字符串

    千次阅读 2020-03-11 14:36:09
    // 正则表达式 Pattern pattern = Pattern.compile(patternStr); // 参数:要匹配的目标字符串 Map map = new HashMap(); map.put("$user_name$","user_value"); map.put("$company_name$","company_value"); map....
    public static void main(String[] args) {
        /**
         * String str = "[Part 'name=1234567']";
         */
        String targetStr = "where 1=1 [and user_name like '%$user_name$%']  [and company_name like '%$company_name$%']";
        String[] split = targetStr.split("]");
        System.out.println("split==== " + split);
        String patternStr = "^[\\s\\S]{0,}\\[\\s{0,}and\\s{0,}[\\d\\W\\w]{1,}\\s{0,}[\\w]{1,}\\s{0,}\\W{0,}(\\$.+?\\$)\\W{0,}\\s{0,}\\s{0,}$";
    
        // 正则表达式
        Pattern pattern = Pattern.compile(patternStr);
        // 参数:要匹配的目标字符串
        Map<String,String> map = new HashMap<String,String>();
        map.put("$user_name$","user_value");
        map.put("$company_name$","company_value");
        map.put("$school_name$","$school_name$");
        /*int groupCount = matcher.groupCount();
        System.out.println("groupCount==== " + groupCount);*/
        for (int i = 0;i<=split.length-1;i++) {
            Matcher matcher = pattern.matcher(split[i]);
            System.out.println("split[i]==== " + split[i]);
            boolean b = matcher.find();
            if (b) {
                String key = matcher.group(1);
                for (Map.Entry<String,String> m : map.entrySet()){
                    String mapKey = m.getKey();
                    if (key.equalsIgnoreCase(mapKey)) {
                        System.out.println("key==== " + key );
                        /*String bigGroup = matcher.group();
                        System.out.println("bigGroup==== " + bigGroup);*/
                        targetStr = targetStr.replace(key,m.getValue());
                       // System.out.println("targetStr after replace innner==== " + targetStr);
                    }
                }
    
            }
          //  System.out.println("targetStr after replace outer==== " + targetStr);
        }
        System.out.println("targetStr after replace final==== " + targetStr);
    }

     

    展开全文
  • // 正则表达式 Pattern pattern = Pattern.compile(patternStr); // 参数:要匹配的目标字符串 Map,String> map = new HashMap,String>(); map.put("$user_name$","user_value"); map.put("$company_name$",...
    public static void main(String[] args) {
        /**
         * String str = "[Part 'name=1234567']";
         */
        String targetStr = "where 1=1 [and user_name like '%$user_name$%']  [and company_name like '%$company_name$%']";
        String[] split = targetStr.split("]");
        System.out.println("split==== " + split);
        String patternStr = "^[\\s\\S]{0,}\\[\\s{0,}and\\s{0,}[\\d\\W\\w]{1,}\\s{0,}[\\w]{1,}\\s{0,}\\W{0,}(\\$.+?\\$)\\W{0,}\\s{0,}\\s{0,}$";
     
        // 正则表达式
        Pattern pattern = Pattern.compile(patternStr);
        // 参数:要匹配的目标字符串
        Map<String,String> map = new HashMap<String,String>();
        map.put("$user_name$","user_value");
        map.put("$company_name$","company_value");
        map.put("$school_name$","$school_name$");
        /*int groupCount = matcher.groupCount();
        System.out.println("groupCount==== " + groupCount);*/
        for (int i = 0;i<=split.length-1;i++) {
            Matcher matcher = pattern.matcher(split[i]);
            System.out.println("split[i]==== " + split[i]);
            boolean b = matcher.find();
            if (b) {
                String key = matcher.group(1);
                for (Map.Entry<String,String> m : map.entrySet()){
                    String mapKey = m.getKey();
                    if (key.equalsIgnoreCase(mapKey)) {
                        System.out.println("key==== " + key );
                        /*String bigGroup = matcher.group();
                        System.out.println("bigGroup==== " + bigGroup);*/
                        targetStr = targetStr.replace(key,m.getValue());
                       // System.out.println("targetStr after replace innner==== " + targetStr);
                    }
                }
     
            }
          //  System.out.println("targetStr after replace outer==== " + targetStr);
        }
        System.out.println("targetStr after replace final==== " + targetStr);
    }
    
    展开全文
  • 我想写一个正则表达式匹配六个连续的值 例如: 先是匹配 a[0] 到 a[5], 然后再是匹配 a[1] 到 a[6] 再然后是a[2]到a[7] 等等等....... 我请请我正则表达式有没有这种功能,我并不想旋转数组。
  • 文章目录引言I、【使用正则表达式对聊天记录的关键词进行监控】II、NSPredicate在正则表达式的应用2.1 格式化字符串2.2 例子:利用NSPredicate 的evaluateWithObject 方法进行校验III、知识储备3.1 正则表达式的一些...

    引言

    原文:

    https://blog.csdn.net/z929118967/article/details/113503058

    • 利用正则表达式进行匹配查找数据

    1、使用正则表达式对聊天记录的关键词进行监控
    2、NSPredicate在正则表达式的应用:限制UITextField只能输入金额的正则表达式(0. .00)

    I、【使用正则表达式对聊天记录的关键词进行监控】

    https://kunnan.blog.csdn.net/article/details/90169330

    II i

    展开全文
  • JavaScript使用正则表达式获取全部分组内容的方法示例发布时间:2020-08-28 10:10:57来源:脚本之家阅读:115作者:ISaiSai... 需要循环DEMO示例:(如下代码将输出 8 , 9,两个匹配到的分组内容)JS正则demovar r ...
  • 正则表达式用来干嘛正则表达式是用来匹配文本的一种语言。别被语言吓到,正则表达式其实非常简单,可能你花2个小时就能用起来,但是你一定会觉得非常强大,像非常厉害的数据爬取,网页爬虫,都要用到正则表达式!...
  •  为了实现复杂的模式匹配,模式串的构造应该遵循某种规则,这样的模式称为正则表达式(regular expression)。    在Java语言中通过java.util.regex包中的类实现正则表达式的模式匹配。该包中提供了Pattern、...
  • 说在前面正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能。正则表达式在不同的语言中使用...
  • Python正则表达式获取匹配的下标 0. 需求         获取Python正则表达式匹配的下标。如:有一个句子"One plus two equals to three",需要根据模板"X plus Y equals to Z...
  • JS正则表达式完整版

    万次阅读 多人点赞 2018-07-17 13:14:13
    第一章 正则表达式字符匹配攻略 1 两种模糊匹配 2. 字符组 3. 量词 4. 多选分支 5. 案例分析 第1章 小结 第二章 正则表达式位置匹配攻略 1. 什么是位置呢? 2. 如何匹配位置呢? 3. 位置的特性 4. 相关...
  • 关于正则表达式 可以参考相应的笔记另外 如果要提取正则表达式匹配到的内容,使用$1 - $... 按顺序取(第一个表达式 到 第N个表达式匹配到的数据), 这点和linux正则获取的方式是一样的 转载于:...
  • 仔细查看了那些报错的数据对正则表达式匹配有了更深的理解。最短匹配遵循以下原则:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。即最短匹配是右侧最短,左侧不可知,很可能最长。...
  • 正则表达式-贪婪与非贪婪 只因贫道学习爬虫,爬网页的时候总也得不到想要的结果,故而baidu一番,但是晦涩难懂,便根据自己心得留下只言片语,静等有缘人 介绍: 我所理解的贪婪和非贪婪模式,是用于正则中多次匹配...
  • 本文实例讲述了JavaScript正则表达式exec/g实现多次循环用法。分享给大家供大家参考,具体如下:var x = "a.xxx.com b.xxx.com c.xxx.com";希望得到 ["a","b","c"] 这三个结果1. 正则需要 添加 g2. exec 循环,直到...
  • 本文实例讲述了js正则表达式惰性匹配和贪婪匹配用法。分享给大家供大家参考,具体如下:在讲贪婪模式和惰性模式之前,先回顾一下JS正则基础:写法基础:①不需要双引号,直接用//包含 =&gt; /wehfwue123123/....
  • 这里面的向前引用是指引用正则表达式中的第几个匹配信息。(js与oracle中同可以使用,写作\1) 举例 连续重复的4个数字xxxx(1111 ,2222): java中:^(\d)\1{3}$ 起始 数字 向前引用第一个匹配3次 结尾 js中:^(\d...
  • C#正则表达式查找匹配循环替换内容

    千次阅读 2013-09-24 14:46:56
    C#提取网页数据正则表达式二 string regstr = @"(?i)(?)[^)"; //提取td的文字 string regstr = @".+?)>(?.+?)"; //提取链接的内容 string regstr = @".+?)>(?.+?)"; //提取TD中链接的内容
  • 正则表达式基础知识 判断功能:String类的public boolean matches(String regex); 1.判断手机号是否满足需求  :第一个数字是1,第二个数字是3或8,长度为11位  eg:13688886868 ,18912345678 public ...
  • 这里说的正则表达式优化,主要是针对目前常用的NFA模式正则表达式,详细可以参考:正则表达式匹配解析过程探讨分析(正则表达式匹配原理)。从上面例子,我们可以推断出,影响NFA类正则表达式(常见语言:GNU Emacs,...
  • 正则表达式匹配切割替换获取

    千次阅读 2016-08-06 11:08:15
    * 正则表达式:符合一定规则的表达式 * 作用:用于专门操作字符串 * 特点:用一些特定的符号来表示代码的操作,简化书写 * 所以学习正则表达式就是学习一些特定的符号的使用 * 好处:可以简化对字符串的...
  • match() 方法将检索目标字符串,以找到一个或多个与 正则表达式regexp 匹配的文本。match()有两种情况: <!--[if !supportLists]-->1、<!--[endif]-->如果 regexp 具有标志 g,则 match() 方法将执行...
  • 今天在做一个输入框的内容,要求只能输入英文及英文符号,这才去查了资料了解了一下正则表达式匹配规则,发现还是有点难度的,这才对常用的正则表达式来进行总结一下: 1.匹配英文和数字及英文状态下的符号: 2....
  • 正则:(\d+)(?=([,\d])*\]\s*) ...正则表达式匹配  Pattern p=Pattern.compile("正则"); Matcher m2=p.matcher(要匹配内容); while(m2.find()){ m2.group(0)//获取正则表达式获取到的整个字符  m2.
  • PHP中的正则表达式函数 ...PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其使用以“preg_”为前缀命名的函数。另一套是由POSIX(Portable Operation System interface)扩展库提供的。POSIX扩展
  • java正则表达式详解

    万次阅读 多人点赞 2019-04-02 16:35:46
    一、正则表达式术语 1)元字符 : 非一般字符,具有某种意义的字符。如 : \bX : \b边界符, 以 X开始的单词 2)正则表达式语法大全 字符 说明 \ 将下一字符标记为特殊字符...
  • 正则表达式最小匹配的写法

    千次阅读 2018-05-24 23:31:52
    如果把它应用于aabac的话,它会匹配aab而不是ab,因为正则表达式有另一条规则,比懒惰/贪婪规则的优先级更高:最先开始的匹配拥有最高的优先权——The match that begins earliest wins。 要想只拿到匹配的,可以...
  • 正则表达式-创建正则表达式

    千次阅读 2016-10-21 18:56:35
    正则表达式就是一个字符模式。和String对象类似,在JavaScript中正则表达式也是一个对象,它主要用于字符串的模式匹配。创建正则表达式有两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)。  隐式...
  • Perl 正则表达式 模式匹配

    千次阅读 2010-01-27 00:18:00
    模式匹配模式指在字符串中寻找的特定序列的字符,由反斜线包含:/def/即模式def。... + *匹配运算符:=~ ,判断字符串是否与正则表达式匹配,如:#!/usr/bin/perl$string = "This string contains t

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,856
精华内容 29,142
关键字:

正则表达式循环匹配