`
huiqinbo
  • 浏览: 344509 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

今天闲谈下最近写的正则表达式方法,对初学者来说绝对实用【回钦波】

 
阅读更多

////////////////// test1    ADD_START-2012年02月03日  HUIQINBO/////////////////////////

 

public static void main(String args[]){

    String  line =  "     St Sc                  :huiqinbo"
                      +"    St Dt IP               :111.222.111.222"
                      +"    St IP TS               :0x32"
                      +"    St L4 Src Pt/IP te:80(0x50)"
                      +"    St L4 Dst Pt/IP ce:12";

 

    String  line =  "St L4 Src Pt/IP te:80(0x50)"; 

     .........

     String setL4SrcPortICMPtype = getValue(line, "St L4 Src Pt/IP te");

 

     调用getValue后的结果为80(0x50)

     ........
}

 

 

public static String getValue(String line, String attrName) {
        WALog.traceIn();

        if (line == null || attrName == null) {
            throw new IllegalArgumentException();
        }

        String quotedAttrName = Pattern.quote(attrName);

        try {
            Matcher matcher =
Pattern.compile(
                    quotedAttrName + "
\\s*:\\s*(\\S+)\\b").matcher(line);

            if (!matcher.find()) {
                WALog.traceOut();

                return "";
            }

            String value = matcher.group();
            WALog.traceOut();

            return value.substring(value.indexOf(':') + 1).trim();

        } catch (PatternSyntaxException e) {
            WALog.traceOut();

            return "";

        }

    }

 

////////////////// test1    ADD_END-2012年02月03日  HUIQINBO/////////////////////////

 

 

 

///////////////////////test2   ADD_START-2012年02月29日  HUIQINBO//////////////////////////////////

 

今天正好有点时间我来补充一下上面我没有写完的方法:

其实上面的  getValue(String line, String attrName) 方法有不完美之处,为什么呢,因为如果你把我上面写好的程序copy到你的代码中去,会发现我上面写到的 调用getValue后的结果为80(0x50)】 会少一个右括号,正确结果是 80(0x50

 

那为什么会少一个右括号呢,你自己考虑下,因为我写的正则表达式是\\s*:\\s*(\\S+)\\b  它,最后是以 \\b 结尾的,\\b 是指已单词末尾结尾,所以自然右括号就被过虑掉了,那我们该如何来把正确的结果80(0x50)   显示出来呢,下面我再写一个方法来满足需求,真不想写,写完会大家写不给个好评呵:

 

public static String getValue1(String line, String attrName) {
        WALog.traceIn();

        if (line == null || attrName == null) {
            throw new IllegalArgumentException();
        }

        String quotedAttrName = Pattern.quote(attrName);

        try {
         // find key:xx(xx)
            Matcher matcher = Pattern.compile(
                    quotedAttrName + "\\s*:\\s*\\S*\\s*\\(\\s*(\\S+)\\s*\\)").matcher(line);

            if (!matcher.find()) {
             // find key:(xx)
                matcher = Pattern.compile(
                  quotedAttrName + "\\s*:\\s*\\(\\s*(\\S+)\\s*\\)").matcher(line);
               
                if (!matcher.find()) {
                 // find key:xx
                 matcher = Pattern.compile(
                         quotedAttrName + "\\s*:\\s*(\\S+)\\b").matcher(line);
                 if (!matcher.find()) {
                     WALog.traceOut();
 
                     return "";
                 }
                }
            }

            String value = matcher.group();
            WALog.traceOut();

            return value.substring(value.indexOf(':') + 1).trim();

        } catch (PatternSyntaxException e) {
            WALog.traceOut();

            return "";

        }

    }

 

上面的粉色部分就是来处理我们的需求的, 解释下吧,若不又有网友提出各种的问题

\\s*     是指0个或多个空格

\\S*     是指0个或多个字符

\\(       是指小括号的左部分

(\\S+)   一个或多个字符,当然可以把\\S+两边的括号去掉,我这里写是为了便于观客们易看

\\)       是指小括号的右部分

 

这回大家清楚了吧,这次的结果一写是  80(0x50)  

 

好了,更多交流、更多了解,请联系我

QQ:444084929 【回钦波】

个人主面 :http://www.huiqinbo.com

 

 

///////////////////////test2   ADD_START-2012年02月29日  HUIQINBO//////////////////////////////////

0
1
分享到:
评论

相关推荐

    关于程序设计方法学的一些闲谈

    总结来说,程序设计方法学是不断演进的,从最初的技巧至上到结构化、面向对象,再到分布式和敏捷开发,它反映了计算机科学和技术的进步,以及对软件质量、可维护性和开发效率的追求。在实践中,选择合适的设计方法和...

    闲谈工厂模式

    在软件设计模式中,工厂模式是一种非常基础且实用的设计模式,它主要解决的是对象创建的问题。工厂模式的主要目的是封装对象的创建过程,使得代码在不指定具体类的情况下,能够创建对象,增强了代码的可扩展性和可...

    Java设计模式入门闲谈

    ### Java设计模式入门详解 #### 一、设计模式概述 设计模式是软件工程领域中一种通用的解决方案,它描述了...希望本文对初学者有所启发,也期待大家在实际开发中能够灵活运用这些模式,创作出更加优雅和高效的代码。

    SEM优化:品牌词管理闲谈(下).doc

    SEM优化:品牌词管理闲谈(下).doc

    面试中的闲谈技巧,好的闲谈是敲门砖

    面试中的闲谈技巧,好的闲谈是敲门砖

    专题资料(2021-2022年)SEM优化:品牌词管理闲谈下.doc

    因此,对于SEM管理员或SEO专家来说,确保品牌词的高排名是至关重要的,这可以有效地引导这些高度转化的流量直接到达目标网站。 品牌词管理的一些常见策略包括将品牌词推至搜索结果的首位,以及利用品牌变体词来扩大...

    Java基于Swing实现的简单聊天室,支持多人在线闲谈.zip

    Java Swing 是Java提供的一种用于构建桌面应用程序用户界面的图形用户界面工具包,它属于Java ...这个项目对于初学者来说是一个很好的起点,同时也对有经验的开发者有参考价值,帮助他们快速搭建自己的聊天应用框架。

    JS调用XML的结合的闲谈

    例如,通过`document.implementation.createDocument()`创建一个新的XML文档对象,然后使用`getElementsByTagName()`, `getElementById()`, 或 `querySelectorAll()`等方法来选取特定的XML元素。 2. XMLHttpRequest...

    闲谈嵌入式编程的复杂性

    ### 闲谈嵌入式编程的复杂性 #### 嵌入式编程的入门与挑战 嵌入式编程是一项技术密集型的工作,它涉及到软件与硬件的紧密结合。文章提到,很多从事嵌入式编程的工程师往往是从自动化或电子等相关专业转型而来,这...

    开发经验,PCB布板闲谈

    设计者需要综合考虑这些因素来完成一个高质量的PCB布局。 #### 三、信号完整性设计 信号完整性问题主要出现在高速数字电路中,尤其是在使用DDR内存等高速组件时尤为突出。为了减少信号反射、串扰等问题,需要注意...

    河北省青龙满族自治县逸夫中学高中语文 第6专题 第16课 春末闲谈学练案 苏教版选修《现代散文选读》.doc

    6. **创作背景**:《春末闲谈》写于1925年,当时中国正处于北洋军阀统治时期,思想文化领域受到压制,鲁迅借此篇散文对封建统治者的麻痹术进行了批判。 7. **文章主旨**:文章通过细腰蜂与青虫的比喻,揭示了统治者...

    高手讲解系列!闲谈嵌入式编程的复杂性

    闲谈嵌入式编程的复杂性 嵌入式编程是一种复杂的编程技术,需要开发人员具备深入的编程知识和实践经验。文章通过两个实践例子,说明了嵌入式编程中的多个问题,并分析了解决这些问题的方法。 嵌入式编程的复杂性...

    Photoshop调色教程:闲谈LAB模式计算调色详解.docx

    Photoshop调色教程中提到的“LAB模式”是一种与设备无关的颜色模型,它模拟了人眼对颜色的感知,包含了所有人类能看见的颜色。在LAB模式下,图像由一个明度通道和两个颜色通道(a通道和b通道)组成。明度通道负责...

    逐星游戏网

    这个项目对于初学者来说具有一定的学习价值,因为它运用了多种常见的Web开发技术,如伪静态页面和ASHX(HTTP自定义处理程序)来实现动态数据的处理。 首先,我们来看看“伪静态页面”。在Web开发中,伪静态是一种将...

    51种用户研究方法卡片

    移情工具方法要求设计师使用辅助工具如雾气眼镜或过重的手套来模拟不同身体状态下的用户感受,这有助于设计师体验特殊用户群体的困境,从而评估产品的可用性。 等比模型方法利用与实际物体等比例缩小的模型来展示...

    Photoshop调色教程:闲谈LAB模式计算调色详解.pdf

    Photoshop调色教程:闲谈LAB模式计算调色详解 Photoshop调色教程:闲谈LAB模式计算调色详解是一篇详细的Photoshop调色教程,旨在帮助读者深入了解LAB模式计算调色的原理和应用。 LAB 模式的概念 LAB 模式是一种...

    初中语文文摘人生闲谈中国人的“面子

    【描述】: 面子,对于中国人来说,是一个深远而复杂的话题。它涉及到个人尊严、社会地位以及人际交往等多个方面,渗透在日常生活和历史事件中。本文将探讨面子的重要性、来源、表现以及其在不同情况下的运用。 ...

    闲谈GDP老广转自西西河.pdf

    GDP的核算不仅包括实际的市场价格,还可能引入各种价格指数进行调整,如消费者价格指数(CPI)、生产者价格指数(PPI)等,以消除价格变动的影响。此外,经常讨论的GNP(国民生产总值)与GDP相似,但GNP计算的是国民...

    闲谈ARM的汇编指令

    在嵌入式系统领域,学习路径的选择一直是初学者关注的焦点。在51单片机盛行的时代,汇编语言是开发者必备的技能,因为51单片机的资源有限,且当时的C语言库并不完善,尤其是在处理底层硬件操作时,汇编语言的优势尤...

    浅析审计职能和审计方法的运用孙威风.doc

    总的来说,审计职能的多元化和审计方法的灵活运用,共同构成了审计工作的核心。审计不仅是经济活动的监督者,更是组织管理的顾问和服务提供者。在实际操作中,审计人员需要根据具体情况,巧妙地结合各种审计方法,以...

Global site tag (gtag.js) - Google Analytics