java正則字元串匹配
A. java 怎麼利用正則表達式從給定的字元串中取出匹配規則字元串
java正則提取需要用到Matcher類,下面給出案例示例供參考
需要提取車牌號中最後一個數字,比如說:蘇A7865提取5,蘇A876X提取6
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassTest{
publicstaticvoidmain(String[]args){
Strings="A876X";
//把要匹配的字元串寫成正則表達式,然後要提取的字元使用括弧括起來
//在這里,我們要提取最後一個數字,正則規則就是「一個數字加上大於等於0個非數字再加上結束符」
Patternpattern=Pattern.compile("(\d)[^\d]*$");
Matchermatcher=pattern.matcher(s);
if(matcher.find())
System.out.println(matcher.group(1));
}
}
關於Matcher 中的幾個方法說明:
Mathcer.start()
Matcher.end()
Matcher.group()
當使用matches(),lookingAt(),find()執行匹配操作後,就可以利用以上三個方法得到更詳細的信息.
start()返回匹配到的子字元串在字元串中的索引位置.
end()返回匹配到的子字元串的最後一個字元在字元串中的索引位置.
group()返回匹配到的子字元串
示例代碼如下,具體功能請參考注釋
Patternp=Pattern.compile(「d+」);
Matcherm=p.matcher(「aaa2223bb」);
m.find();//匹配2223
m.start();//返回3
m.end();//返回7,返回的是2223後的索引號
m.group();//返回2223
Mathcerm2=p.matcher(「2223bb」);
m2.lookingAt();//匹配2223
m2.start();//返回0,由於lookingAt()只能匹配前面的字元串,所以當使用lookingAt()匹配時,start()方法總是返回0
m2.end();//返回4
m2.group();//返回2223
Matcherm3=p.matcher(「2223」);//如果Matcherm3=p.matcher(「2223bb」);那麼下面的方法出錯,因為不匹配返回false
m3.matches();//匹配整個字元串
m3.start();//返回0
m3.end();//返回3,原因相信大家也清楚了,因為matches()需要匹配所有字元串
m3.group();//返回2223
另外,Mathcer類中start(),end(),group()均有一個重載方法它們是start(int i),end(int i),group(int i)專用於分組操作,Mathcer類還有一個groupCount()用於返回有多少組.
示例如下:
Patternp=Pattern.compile(「([a-z]+)(d+)」);
Matcherm=p.matcher(「aaa2223bb」);
m.find();//匹配aaa2223
m.groupCount();//返回2,因為有2組
m.start(1);//返回0返回第一組匹配到的子字元串在字元串中的索引號
m.start(2);//返回3
m.end(1);//返回3返回第一組匹配到的子字元串的最後一個字元在字元串中的索引位置.
m.end(2);//返回7
m.group(1);//返回aaa,返回第一組匹配到的子字元串
m.group(2);//返回2223,返回第二組匹配到的子字元串
注意: 只有當匹配操作成功,才可以使用start(),end(),group()三個方法,否則會拋出java.lang.IllegalStateException,也就是當matches(),lookingAt(),find()其中任意一個方法返回true時,才可以使用。
B. 請問java字元串處理的正則表達式中,要怎麼匹配//...和/*...*/(也就是匹配java注釋) 謝謝!
下面是關於java的正則處理原理和上面的基本一樣,我覺得如果真的匹配java代碼裡面的注釋這個還不夠還需要很多的條件因為有可能你的代碼裡面本身就有相關字元的處理.所以我認為需要根據你具體的情景進行正則設計
Patternp=Pattern.compile("//.*");
str="//0000";
m =p.matcher(str);
System.out.println(m.matches());
p=Pattern.compile("/\\*.*\\*/");
str="/*999*/";
m =p.matcher(str);
System.out.println(m.matches());
C. java 正則匹配字元是否為純數字
java 正則匹配字元為純數字方法:
定義正則表達式為:
Stringreg="^\d+$"
獲取要判斷的字元串:
Stringstr;//可以通過Scanner從控制台輸入,也可以用字元串常量進行初始化
調用字元串的matches方法判斷字元串為純數字情況:
str.matches(reg);
如果是純數字返回為true,否則返回為false;
D. JAVA正則表達式獲取特定的字元串
^ 和 $ 他們是分別用來匹配字元串的開始和結束,以下分別舉例說明:
"^The": 開頭一定要有"The"字元串;
"of despair$": 結尾一定要有"of despair" 的字元串;
那麼,
"^abc$": 就是要求以abc開頭和以abc結尾的字元串,實際上是只有abc匹配。
"notice": 匹配包含notice的字元串。
你可以看見如果你沒有用我們提到的兩個字元(最後一個例子),就是說 模式(正則表達式) 可以出現在被檢驗字元串的任何地方,你沒有把他鎖定到兩邊。
接著,說說 '*', '+',和 '?',
他們用來表示一個字元可以出現的次數或者順序. 他們分別表示:
"zero or more"相當於{0,},
"one or more"相當於{1,},
"zero or one."相當於{0,1}, 這里是一些例子:
"ab*": 和ab{0,}同義,匹配以a開頭,後面可以接0個或者N個b組成的字元串("a", "ab", "abbb", 等);
"ab+": 和ab{1,}同義,同上條一樣,但最少要有一個b存在 ("ab", "abbb", 等.);
"ab?":和ab{0,1}同義,可以沒有或者只有一個b;
"a?b+$": 匹配以一個或者0個a再加上一個以上的b結尾的字元串.
要點, '*', '+',和 '?'只管它前面那個字元.
你也可以在大括弧裡面限制字元出現的個數,比如
"ab{2}": 要求a後面一定要跟兩個b(一個也不能少)("abb");
"ab{2,}": 要求a後面一定要有兩個或者兩個以上b(如"abb", "abbbb", 等.);
"ab{3,5}": 要求a後面可以有2-5個b("abbb", "abbbb", or "abbbbb").
現在我們把一定幾個字元放到小括弧里,比如:
"a(bc)*": 匹配 a 後面跟0個或者一個"bc";
"a(bc){1,5}": 一個到5個 "bc."
還有一個字元 '│', 相當於OR 操作:
"hi│hello": 匹配含有"hi" 或者 "hello" 的 字元串;
"(b│cd)ef": 匹配含有 "bef" 或者 "cdef"的字元串;
"(a│b)*c": 匹配含有這樣多個(包括0個)a或b,後面跟一個c的字元串;
一個點('.')可以代表所有的單一字元,不包括"\n"
如果,要匹配包括"\n"在內的所有單個字元,怎麼辦?
對了,用'[\n.]'這種模式.
"a.[0-9]": 一個a加一個字元再加一個0到9的數字
"^.{3}$": 三個任意字元結尾 .
中括弧括住的內容只匹配一個單一的字元
"[ab]": 匹配單個的 a 或者 b ( 和 "a│b" 一樣);
"[a-d]": 匹配'a' 到'd'的單個字元 (和"a│b│c│d" 還有 "[abcd]"效果一樣); 一般我們都用[a-zA-Z]來指定字元為一個大小寫英文
"^[a-zA-Z]": 匹配以大小寫字母開頭的字元串
"[0-9]%": 匹配含有 形如 x% 的字元串
",[a-zA-Z0-9]$": 匹配以逗號再加一個數字或字母結尾的字元串
你也可以把你不想要得字元列在中括弧里,你只需要在總括弧裡面使用'^' 作為開頭 "%[^a-zA-Z]%" 匹配含有兩個百分號裡面有一個非字母的字元串.
要點:^用在中括弧開頭的時候,就表示排除括弧里的字元。為了PHP能夠解釋,你必須在這些字元面前後加'',並且將一些字元轉義.
E. java 怎麼利用正則表達式從給定的字元串中取出匹配規則字元串
利用正則表達式從給定的字元串中取出符合匹配規則的字元串的Java程序如下:
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassE{
publicstaticvoidmain(String[]args){
Patternp=Pattern.compile("[A-Za-z]+");//設定匹配規則為取出字元串中的字母
Matcherm=p.matcher("12sifiwq820aufu");//與字元串匹配
while(m.find()){
System.out.println(m.group());
}
}
}
運行結果:
sifiwq
aufu