美文网首页程序员Android开发
匹配字符串,正则表达式用了就高大上了?

匹配字符串,正则表达式用了就高大上了?

作者: 岛上码农 | 来源:发表于2020-11-22 12:21 被阅读0次

前言:作者举了一个例子来表名在实际开发中,做字符串检测时,会使用正则表达式;但是有些时候压根没必要,而导致这样的原因其实是开发者的基础不够扎实。看似很牛地使用了正则表达式解决了问题,而实际上存在更简单的方法。因此,程序员的扎实的程序语言基础其实十分重要,而当前恰恰是很多新人盲目学学框架,却忘记打基础,结果导致实际开发过程中的代码一塌糊涂。

Nohemi有个程序需要使用基于角色的安全访问认证,基于他们组织的需要,他们的角色名称规则有点不寻常。有些角色名称是需要大小写匹配的,而有些角色名称有更灵活格式。然后她的同事编写了如下代码根据角色名称解析对应的系统角色的。

    public static String decodeRole(String role) {
        String decodedRole = "";
        if (role != null && !role.trim().equals("")) {
            if (role.trim().equalsIgnoreCase(ROLE_1_STRING))
                decodedRole = CODE_ROLE_1;
            else if (role.trim().equalsIgnoreCase(ROLE_2_STRING))
                decodedRole = CODE_ROLE_2;
            else if (role.trim().equalsIgnoreCase(ROLE_3_STRING))
                decodedRole = CODE_ROLE_3;
            else if (personalContains(role.trim(), ROLE_4_STRING))
                decodedRole = CODE_ROLE_4;
        }
        return decodedRole;
    }

这是角色名称转换为系统角色的关键方法。角色1、2和3必须准确匹配。而角色4,需要通过特殊规则匹配 — 一个需要通过正则表达式校验的复杂规则。

    private static final String REGEXP_SUFFIX = ").*$";
    private static final String REGEXP_PREFIX = "^.*(";
    public static boolean personalContains(String fatherString,
                                           String toSearchString) {
        Pattern p = Pattern.compile(REGEXP_PREFIX + toSearchString.toLowerCase()
                + REGEXP_SUFFIX);
        Matcher m = p.matcher(fatherString.toLowerCase());
        boolean matchFound = m.matches();
        if (matchFound)
            return true;
        else
            return false;
    }

这段代码的规则是这样的,如果你搜索一个字符串,例如ROLE_4,则构建完成的正则表达式为^.*(ROLE_4).*$。也就是这个字符串的开头必须是0个或多个字符,然后是ROLE_4字符串,最后是以0个或多个字符结尾。

实际上这是一个是否包含子字符串的的检测,而这不应该是首选的做法。一方面通过前后拼接、包含变量构建正则表达式代码看起来十分费解,另一方面Java的String类本身就提供了一个String.contains方法来做这件事情。这个花费力气写的personalContains方法根本没必要。

更扯淡的是,本来这个方法返回的结果只需要是return m.matches()即可,结果他们还增加了一个matchFound变量,简直就是画蛇添足!

        if (matchFound)
            return true;
        else
            return false;

wx公号:岛上码农

相关文章

  • 匹配字符串,正则表达式用了就高大上了?

    前言:作者举了一个例子来表名在实际开发中,做字符串检测时,会使用正则表达式;但是有些时候压根没必要,而导致这样的原...

  • 正则表达式

    创建正则表达式 正则.test(字符串) 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假 转义字符 ...

  • 正则表达式

    创建正则表达式 正则.test(字符串) 正则去匹配字符串,如果匹配成功就返回真,如果匹配失败就返回假 转义字符 ...

  • Python基础(15)——正则表达式

    re.match() re.match(正则表达式,要匹配的字符串),匹配出以字符串的起始位置开始匹配正则表达式,...

  • 2018-06-19re的高级用法(1)

    re.search(正则表达式, 需要匹配的目标字符串)从左到右只要找到就匹配,只要能匹配到就行,匹配到一个就结束...

  • 正则表达式

    正则表达式主要用于字符串的查找、匹配、分割 match(正则表达式字符串,需要匹配的字符串) 1.不带任何正则符号...

  • python--正则

    正则表达式是一个单独的部分,无论什么语言,都需要正则表达式。正则表达式:正则表达式是用了匹配或提取字符串的。正则表...

  • Java正则表达式

    定义:正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。正则表达式使用单个字符串来描述、匹配一系...

  • 正则re表达式python

    说明pattern--匹配的正则表达式string--要匹配的字符串repl --要替换的字符串flags--匹配...

  • R学习笔记(7):使用stringr处理字符串(2)

    目标:结合正则表达式,实现 确定与某种模式匹配的字符串找出匹配位置提取匹配内容替换匹配内容基于匹配拆分字符串 1....

网友评论

    本文标题:匹配字符串,正则表达式用了就高大上了?

    本文链接:https://www.haomeiwen.com/subject/nqduiktx.html