概要
什么是正則表達(dá)式,正則表達(dá)式用來干什么,可能會(huì)困擾一些初學(xué)者。我們都用過一些文本編輯器,例如
Word
,
Word
為我們提供“查找—替換”功能,正則表達(dá)式就類似于
Word
的這種功能。
“
正則表達(dá)式
”
(
Regular Expression
)就是一個(gè)字符構(gòu)成的串,它定義了一個(gè)用來搜索匹配字符串的模式。
Java.util. Pattern
JDK 對(duì)正則表達(dá)式的支持,來源于 java.util.Pattern 類。在 java api 中定義 Pattern 為“ A
compiled representation of a regular expression ”,譯為“正則表達(dá)式編譯后的表現(xiàn)”。
Java.util.Matcher
在
java api
中定義
Matcher
為“
An engine that performs match operations on
a character sequence by interpreting a Pattern
”,
可以譯為“依據(jù)解釋
Pattern
而生成的字符序列來執(zhí)行匹配操作的引擎”。
在
API
中,給出了典型的調(diào)用過程:
??????Pattern p = Pattern.compile("a*b");?? //
正則表達(dá)式
??????Matcher m = p.matcher("aaaaab");????? //
代匹配的字符串
??????boolean b = m.matches();
正則表達(dá)式摘要
字符集 (characters)
字符
|
含義
|
x |
X 字符 |
\\ |
反斜線符號(hào) (\) |
\0 n |
八進(jìn)制數(shù)值 ( 其中 0<=n<=7) |
\0 nn |
八進(jìn)制數(shù)值 ( 其中 0<=n<=7) |
\0 mnn |
八進(jìn)制數(shù)值 ( 其中 0<=m<=3 , 0<=n<=7) |
\x hh |
十六進(jìn)制數(shù)值 |
\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 ( 區(qū)間 ) |
||
[a-d[m-p]] |
|
||
[a-z |
d , e , or f ( 交集 ) |
||
[a-z |
a through z , except for b and c : [ad-z] ( 子集 ) |
||
[a-z |
a through z , and not m through p : [a-lq-z] ( 子集 ) |
其他的正則表達(dá)式請(qǐng)參考API。
示例
??????private static final String procedureREx = "(REP_(\\d{1})_(\\d{1,2})(_(\\d{1}))?)";? //正則表達(dá)式
?????
???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);??????//編譯正則表達(dá)式
??????? Matcher matcher = procPattern.matcher(procedure);?????????//匹配字符串到正則表達(dá)式
??????? if (matcher.find()) {????????????????????????????????????//字符串是否匹配正則表達(dá)式
??????????? 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