posts - 28,  comments - 15,  trackbacks - 0

概要

什么是正则表达式,正则表达式用来干什么,可能会困扰一些初学者。我们都用过一些文本编辑器,例如 Word Word 为我们提供“查找—替换”功能,正则表达式就类似于 Word 的这种功能。 正则表达式 Regular Expression )就是一个字符构成的串,它定义了一个用来搜索匹配字符串的模式。

Java.util. Pattern

JDK 对正则表达式的支持,来源于 java.util.Pattern 类。在 java api 中定义 Pattern 为“ A

compiled representation of a regular expression ”,译为“正则表达式编译后的表现”。

Java.util.Matcher

java api 中定义 Matcher 为“ An engine that performs match operations on a character sequence by interpreting a Pattern ”,
可以译为“依据解释
Pattern 而生成的字符序列来执行匹配操作的引擎”。 API 中,给出了典型的调用过程:

      Pattern p = Pattern.compile("a*b");   // 正则表达式

      Matcher m = p.matcher("aaaaab");      // 代匹配的字符串

      boolean b = m.matches();

正则表达式摘要

字符集 (characters)

字符

含义

x

X 字符

\\

反斜线符号 (\)

\0 n

八进制数值 ( 其中 0<=n<=7)

\0 nn

八进制数值 ( 其中 0<=n<=7)

\0 mnn

八进制数值 ( 其中 0<=m<=3 0<=n<=7)

\x hh

十六进制数值

\t

Tab 字符 (‘ \u0009' ’)

\e

Esc 字符 (‘ \u001B' ’)

\n

换行符 (‘ \u000A' ’)

\d

[0-9]

\D

[^0-9]

\w

[A-Z0-9]

 

 

 

 

字符类集

字符

含义

[abc]

a , b , or c (simple class)

[^abc]

Any character except a , b , or c ( )

[a-zA-Z]

a through z or A through Z , inclusive ( 区间 )

[a-d[m-p]]

[a-d[m-p]]

a through d, or m through p: [a-dm-p] ( 联合)

[a-z&&[def]]

d , e , or f ( 交集 )

[a-z&&[^bc]]

a through z , except for b and c : [ad-z] ( 子集 )

[a-z&&[^m-p]]

a through z , and not m through p : [a-lq-z] ( 子集 )


其他的正则表达式请参考API。

示例

      private static final String procedureREx = "(REP_(\\d{1})_(\\d{1,2})(_(\\d{1}))?)";  //正则表达式
     
   private static ProcedureInfo getProcedureInfo(String procedure) {
        ProcedureInfo info = new ProcedureInfo();

        String procedureName = null;
        String category = null;
        String reportNo = null;
        String rowType = null;

        Pattern procPattern = Pattern.compile(procedureREx);      //编译正则表达式

        Matcher matcher = procPattern.matcher(procedure);         //匹配字符串到正则表达式

        if (matcher.find()) {                                    //字符串是否匹配正则表达式
            procedureName = matcher.group(1);
            category = matcher.group(2);                     
            reportNo = matcher.group(3);
            rowType = matcher.group(5);

            info.setName(procedureName);
            info.setCategory(Integer.parseInt(category));
            info.setReportNo(Integer.parseInt(reportNo));

            if (rowType != null) {
                info.setRowType(Integer.parseInt(rowType));
            }

            info.setArgs(getArgs(procedure));
            return info;
        } else {
            System.out.println("can't recognize procedure:" + procedure);
            return null;
        }
    }

参考:
http://buy.ccw.cn/htm/app/aprog/01_7_31_4.asp
http://java.sun.com/j2se/1.4.2/docs/api/java/util/regex/package-summary.html
http://www.javaresearch.org/article/showarticle.jsp?column=331&thread=2488

posted on 2006-04-25 17:43 zhangxl 阅读(725) 评论(1)  编辑  收藏 所属分类: JAVA 基础文章


FeedBack:
#  JAVA 正则表达式
2007-01-22 14:39 | fafdsa
JAVA 正则表达式 JAVA 正则表达式 JAVA 正则表达式 JAVA 正则表达式  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年1月>
31123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(1)

随笔分类(17)

随笔档案(28)

文章分类(30)

文章档案(30)

相册

收藏夹(2)

hibernate

java基础

mysql

xml

关注

压力测试

算法

最新随笔

搜索

  •  

积分与排名

  • 积分 - 94630
  • 排名 - 605

最新评论

阅读排行榜

评论排行榜