`
dingjob
  • 浏览: 183640 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

靓号正则表达式(前后向查找等) 和 apache正则包使用

阅读更多

一般公司在开发一类对的号码时,会预留一些号码给以后升级的会员使用,比如旺旺靓号,QQ号等,采用正则表达式实现较好,通过规则引擎的后台页面做成实时可配置的也是不错的选择。

一. 一般会有如下的正则需求

    代码中每行都标有注释,这个就是需求,为设置靓号应该考虑的方面,这里特别提示下,不能忘记跟公司相关的业务,股票代码等检查。

 

 

代码如下:

public class CreditCodeRegexValidateStategyServiceImpl implements CreditCodeValidateStategyService {

    private static List<String> levitPatterns;

    static synchronized private void init() {
        if (levitPatterns == null) {
            levitPatterns = new ArrayList<String>();
        } else {
            return;
        }
        // 手机号、生日号、跟公司业务相关的号码
     levitPatterns.add("^(0|13|15|18|168|400|800)[0-9]*$");
        levitPatterns.add("^\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])$");
        levitPatterns.add("^\\d*(1688|2688|2088|2008|5188|10010|10001|666|888|668|686|688|866|868|886|999)\\d*$");
        // 重复号码,镜子号码
     levitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");
        levitPatterns.add("^(\\d)(\\d)(\\d)\\3\\2\\1$");
        // AABB
        levitPatterns.add("^\\d*(\\d)\\1(\\d)\\2\\d*$");
        // AAABBB
        levitPatterns.add("^\\d*(\\d)\\1\\1(\\d)\\2\\2\\d*$");
        // ABABAB
        levitPatterns.add("^(\\d)(\\d)\\1\\2\\1\\2\\1\\2$");
        // ABCABC
        levitPatterns.add("^(\\d)(\\d)(\\d)\\1\\2\\3$");
        // ABBABB
        levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");
        // AABAAB
        levitPatterns.add("^(\\d)\\1(\\d)\\1\\1\\2$");
        
        // 4-8 位置重复
        levitPatterns.add("^\\d*(\\d)\\1{2,}\\d*$");
        // 4位以上 位递增或者递减(7890也是递增)
        levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");
        
        // 不能以 518 、918 结尾
        levitPatterns.add("^[0-9]*(518|918)$");
    }

    @Override
    public boolean isAllow(String input) {
        Assert.notNull(input);
        return !RegexUtil.contains(input, levitPatterns);
    }

    static {
        init();
    }

对于以上正则,前面的大多人都很熟悉了,这里主要讲位置查找和前后向查找,即如下两种号码的判断

  

  // ABBABB
        levitPatterns.add("^(\\d)(\\d)\\2\\1\\2\\2$");
  // 4位以上 位递增或者递减(7890也是递增)
        levitPatterns.add("(?:(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0)){2,}|(?:0(?=9)|9(?=8)|8(?=7)|7(?=6)|6(?=5)|5(?=4)|4(?=3)|3(?=2)|2(?=1)|1(?=0)){2,})\\d");
        

位置查找: \\2\\1\\2\\2 这部分代表的 第一个A 位置是1 第二个B位置是2,重复B则用\\2标识

后向查找   ("(?:(?:0(?=1)| 对于连续号码,?=表示往后看,要判断0后面是1吗,1后面是2吗,如此反复可以得到连续号码

 

二. 使用 org.apache.oro.text.regex.Pattern   代替 java自身带的partern,

为什么抛弃java现有的API不用,而使用perl5规范的正则库呢?他是最全面的正则表达式API,全面兼容perl5,同时也是优化的最好的API之一,在未来的JDK版本中可能会看到的。

 

 

上面程序调用的正则代码如下:

public class RegexUtil {

    private static PatternCompiler compiler = new Perl5Compiler();

    private static PatternMatcher  matcher  = new Perl5Matcher();

    private static Pattern         pattern  = null;

    /**
     * 根据正则过滤条件过滤
     * 
     * @param input
     * @param levitPatterns
     * @return
     * @throws MalformedPatternException
     */
    public static boolean contains(String input, String patternString) {
        try {
            pattern = compiler.compile(patternString);
            if (matcher.contains(input, pattern)) {
                return true;
            }
        } catch (MalformedPatternException e) {
            return false;
        }
        return false;
    }

    /**
     * 根据批量正则过滤条件过滤
     * 
     * @param input
     * @param patternStrings
     * @return
     * @throws MalformedPatternException
     */
    public static boolean contains(String input, List<String> patternStrings) {
        for (Iterator<String> lt = patternStrings.listIterator(); lt.hasNext();) {
            if (contains(input, (String) lt.next())) {
                return true;
            }
            continue;
        }
        return false;
    }
}

 

 

 

分享到:
评论

相关推荐

    靓号正则表达式 已测试 正连 倒连 顺增 顺降

    根据提供的标题、描述以及部分代码内容,我们可以总结出与靓号相关的正则表达式的知识点,主要涉及了靓号的不同类型及其对应的正则表达式规则。靓号通常指的是手机号码或其他号码序列中具有一定规律性的数字组合,...

    PB实现的正则表达式

    在IT领域,正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它能够进行复杂的模式匹配、查找、替换等操作。在本话题中,我们将探讨如何使用PowerBuilder 11.5这一经典的开发环境来实现正则...

    pb 使用正则表达式源码pbregexp

    标题中的“pb 使用正则表达式源码pbregexp”指的是在PowerBuilder(简称pb)环境中,利用名为“pbregexp”的正则表达式组件来实现源代码级别的正则表达式操作。PowerBuilder是一款流行的可视化的、面向对象的软件...

    Lucene 使用正则表达式

    正则表达式是一种强大的文本模式匹配工具,广泛应用于字符串搜索和替换等场景。在Lucene中,可以通过`regexQuery`来利用正则表达式进行复杂条件的匹配,从而实现更精确的搜索需求。 #### regexQuery详解 `regexQuery`...

    正则表达式转换工具

    正则表达式(Regular Expression,简称regex)是一种强大的文本处理工具,它用于匹配、查找、替换等操作,涉及字符串处理的各个领域。正则表达式转换工具是专门针对这一需求而设计的,它能帮助用户将输入的内容转换...

    VC、VC++,MFC 正则表达式类库

    正则表达式类库则为VC++和MFC的开发者提供了对正则表达式功能的支持。 "VC、VC++,MFC 正则表达式类库"指的是在MFC中实现或集成的正则表达式处理模块。这个库通常包含一系列的类和函数,允许程序员编写符合特定模式...

    正则表达式测试工具C#版(src)

    本项目提供了一个C#编写的正则表达式测试工具,包含完整的源代码,可以帮助开发者调试和测试他们的正则表达式,支持查找和替换功能,并能直观地显示匹配结果。 1. **C#中的正则表达式基础** - `System.Text....

    qt使用正则表达式限制lineEdit的输入,对正则表达式进行了封装,可以直接引入,工程编译正常

    在Qt框架中,正则表达式(Regular Expression)是一种强大的文本处理工具,它允许程序员以结构化的方式匹配、查找、替换或验证字符串。本项目针对Qt的lineEdit组件,通过正则表达式实现了输入限制功能,使得lineEdit...

    wps表格excel正则工具,excel正则表达式替换/匹配/查找/搜索/提取数字

    而本软件正是把强大的正则功能完美地添加到表格中,让 Excel、WPS 支持正则表达式的搜索、匹配提取、替换、定位等,让数据处理能力进化一个层次! 让 Office Excel、WPS 表格支持正则表达式的免费插件:「Excel ...

    Java使用正则表达式提取XML节点内容的方法示例

    我们提供了一系列的Java正则表达式技巧大全,包括《Java正则表达式技巧大全》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》等系列文章。...

    正则表达式必知必会v_1.0.pdf

    正则表达式的语法比较容易理解,但学习正则表达式的主要困难在于如何灵活运用这些规则来达到查找和替换的目的。 匹配单个字符 在正则表达式中,可以使用句点(.)来匹配任意单个字符。句点在正则表达式中被称为元...

    C语言正则表达式库

    1. **语法兼容性**:如描述所述,PCRE库的正则表达式语法与Perl语言高度兼容,这意味着开发者可以利用Perl中广泛使用的正则表达式语法,如贪婪和非贪婪量词、分支选择、反向引用等。 2. **Unicode支持**:PCRE库...

    正则表达式在数据库查询中的应用

    ### 正则表达式在数据库查询中的应用 #### 引言 在数据库管理与应用程序开发中,查询数据是一项常见的任务。...然而,在使用正则表达式时也需要考虑到潜在的性能和安全问题,确保其在实际应用中的有效性和可靠性。

    手机号码的三网的正则表达式

    移动,联通,电信包括虚拟运营商在内的,手机号码归属正则。包括14,16,17,19等号段。短信精灵整理发布。

    Linux在合集中使用正则表达式来匹配查找.zip

    在Linux系统中,正则表达式(Regular Expression)是一种强大的文本处理工具,它能用于匹配、查找、替换等操作,广泛应用于数据提取、文件搜索、脚本编程等多个领域。本合集主要围绕如何在Linux环境下利用正则表达式...

    易语言正则表达式文本替换

    - `子程序_正则文本查找`:用于在文本中查找符合正则表达式的子串,返回匹配的起始位置和结束位置。 - `子程序_正则文本替换`:可能包含以下参数:源文本、正则表达式模式、替换字符串、替换选项。返回替换后的...

    使用Java正则表达式分析处理日志

    本篇将围绕“使用Java正则表达式分析处理日志”这一主题,探讨如何利用Java的正则表达式功能来提取、过滤和操作日志数据。 首先,我们需要理解正则表达式的基本概念。正则表达式(Regular Expression)是一种模式...

    使用正则表达式验证一年的12个月份

    正则表达式是一种强大的文本处理工具,用于匹配、查找、替换等操作,广泛应用于编程语言中。在IT行业中,正则表达式是处理字符串时不可或缺的一部分,尤其在数据验证、文本提取等方面。在这个场景中,我们需要创建一...

    精通正则表达式(第3版)(含awz3 mobi epub)

    随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。本书是讲解正则表达式的经典之作。本书主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校...

    正则表达式不包涵特殊字符(除了 指定字符 以外)

    正则表达式是一种强大的文本处理工具,能够帮助我们在文本数据中执行复杂的查找、替换和提取操作。其主要应用领域包括文本搜索、数据验证和数据清洗等。正则表达式的语法由一系列用于描述字符串模式的字符和元字符...

Global site tag (gtag.js) - Google Analytics