JAVA 正则表达式涉及的三个类:
3 C) m6 R8 P# P( o& `' `: M String,Pattern,Matcher3 e ]3 l! ]( ?8 j/ z* s, }" X. \
Pattern是要匹配的模式,Matcher是匹配的结果.
& z0 D4 @1 f3 M# L- h# E 例如:Pattern p = Pattern.complie("[a-z]{3}");. g, Y Q7 P7 q! t( g5 \
Matcher m = p.mather("abc");$ P" ], n) y" ^
要想在正则表达式中匹配一个反斜线用四个反斜线表示: "\\".matches("\\\\");
( Q+ D# G& E& M# c2 @ 匹配空白行 " \n".matches("^[\\s&&[^\\n]]*\\n$");
6 h- o$ g( t: v- F 找出匹配结果在整个字符串的开始位置和结束位置
% w! [7 U) h' | Pattern p = Pattern.complie("\\d{3,5}");7 z9 O1 \ J' y4 ]4 A$ w- @
String a = "123-2135-155-00";2 U) l" U W1 Q2 o
Matcher m = p.matcher(s);
/ U$ l; `' G3 d6 ?& d! A m.matches() // 匹配整个字符串,所以这里是false;
. k5 O# \! g b m.reset();
- }9 H' Q3 q P7 m+ O while(m.find()) // 找一个和这个模式所匹配的子串
; q& M: J! @) u) x W {4 h6 A3 b) G, R) H# g5 w
System.out.println(m.start() + "To" + m.end());' G4 l" @! n! N' t @$ q, s7 y
}+ y3 C/ Z p% D; n9 ]1 c4 P
将匹配到的java都转换成大写的
- |/ C" D! E; U! d Pattern p = Pattern.complie("java", Pattern.CASE_INSENSITIVE);
8 b7 S* c6 p. P Matcher m = p.matcher("java Java JaVa IloveJava You HateJaVA");
. y5 m$ v' o6 k8 X2 m+ A9 g; \ m.replaceAll("JAVA");
/ ]5 q1 ]; ~6 I `5 u 将匹配偶数个转换为大写,奇数个转换为小写
2 I3 _) c* T' u9 C2 h package zx.test;0 e; Y$ ?. k% C" Q
import java.util.regex.Matcher;9 f7 m! ?* {, V% L
import java.util.regex.Pattern;
+ \2 q) h2 B& K' T5 j- N! e public class TestPattern
' v* R7 K4 D5 G# m8 r& Q, k9 i {
U H- v- h8 P$ I9 x1 K* F/ q public static void main(String[] args)0 z+ R9 S3 j; i% c2 d$ d+ V7 j) ~
{
+ A1 Q% v: N4 B6 N+ @! x. h StringBuffer newString = new StringBuffer();! H1 ?; V; ` R. p* @& `
String isPatternString = "java Java JaVa IloveJava You HateJaVA";' S$ i$ L! M' v/ B: B
Pattern p = Pattern.compile("java", Pattern.CASE_INSENSITIVE);; j! M2 E* B& W3 v: f Y
Matcher m = p.matcher(isPatternString);
- L, j9 G; w8 ] H0 n/ {2 P int i = 0;
H& `* u+ ^+ `3 P5 K! ] while(m.find())
1 _& D" e& i1 {1 I/ t" J {
8 ?- d& R( D9 I! m$ A" G# ~: u i++;' r6 a a, ^1 `! C; u8 x* p; R
if (i % 2 == 0)
; O- K8 i! X Q. G0 ]7 R, s5 q' v9 e {
: x/ y7 q, K4 j- W5 g( x1 m m.appendReplacement(newString, "java");' N/ {, ]$ \6 {, e
}- f( ~# r: f$ l( P3 L" _( D* h: G
else3 y1 S: p! u$ d$ z" k6 X
{
$ h) B2 |/ F% H$ x m.appendReplacement(newString, "JAVA");
, T! G8 ?& [7 W+ i* P }
9 r/ f; w) M- E6 [1 d2 d }
2 F+ k7 ?/ e3 @5 ]6 L4 t, ] m.appendTail(newString);
7 P' G6 }; Y2 D7 U6 F System.out.println(newString);6 g% [! F. ?" R7 d5 g9 a I
}
* a5 p5 b% @' U( O1 m5 z }' B4 H- z8 t4 C, ]+ y
输出结果:JAVA java JAVA Ilovejava You HateJAVA
6 g, |' M! g; a, s6 L/ L, o% \ Java正则表达式分组:
" M; O& _! o, j1 v: s; I) O, [) k private static void testGroup()( J/ Y2 @( O! ^9 X: B( k. o/ {
{
9 b9 L, ?- a# a. x String s = "3412afdsaf-34ijii-422342k23-423423fsdfaf";4 d* k. @) @3 A* N
Pattern p = Pattern.compile("(\\d{1,10})([a-z]{1,9})"); // 组1:(\\d{1,10}) 组2:([a-z]{1,9})# g! |# @0 J/ v
Matcher m = p.matcher(s);8 H/ w! I/ A' r3 c( j1 D
while(m.find())
( t- R" m, v- X/ \ {
+ E: I2 A7 t' O6 A0 R& g5 t1 ^) z System.out.println("Group0: " + m.group() + " Group1: " + m.group(1) + " Group2: " + m.group(2));
& S) v/ ~0 \: [6 W6 Y }
5 Q k& v8 L, s }
' P* a9 R+ e6 R/ D H) \ 输出结果:
, s# P0 N- L+ L; f+ W* v6 z" u Group0: 3412afdsaf Group1: 3412 Group2: afdsaf
* b2 Z T9 t4 S* U } Group0: 34ijii Group1: 34 Group2: ijii
. E9 d- A% o1 Z! W& x! ]. }1 y Group0: 422342k Group1: 422342 Group2: k
4 [. N) U4 |. K' z Group0: 423423fsdfaf Group1: 423423 Group2: fsdfaf |