❶ java 正則表達式組(Group)的使用
其實,你印出所有的group,就清楚如何寫()了。
❷ java正則表達式分組
舉例:正則 (http://)(.*)(\.com)$ 需要處理的 字元串 http:// www . kandianyingla .com
group 0 http :// www. kandianyingla .com
group 1 http://
group 2 www . kandianyingla
group 3 .com
了解?
❸ Java中 正則表達式中 組 是怎麼用的我看了n遍,沒看懂
組其實就是用來提取正則中匹配到的內容。
比如有正則表達式:abc(\d{2,5})efg,這個正則本身的意思很簡單,就是字元串abc和efg之間有2到5個數字,所以字元串"abc12efg"、「abc34567efg」都能滿足這個正則匹配。這個相信你能理解。
那麼正則表達式模式中用小括弧包起來的"\d{2,5}"這部分就叫「捕獲組」,正則表達式引擎會將這部分匹配到的內容記下來,以便以後取用。java代碼中,可以在調用Matcher對象的find方法得到true的返回值的時候(true說明正則表達式模式找到了符合匹配的內容),調用該Matcher對象的group(int groupNo)方法獲得指定的組內容。還拿剛才那個例子來說,調用matcher.group(1)就會得到"12"、「34567」這樣實際匹配的內容。這里要特別注意一下,組編號是從1開始計算的。0號組實際上就是整個正則表達式匹配到的內容。
再深入一點,上面講到的所謂組是「捕獲組」,正則引擎會記下來匹配內容,但是有時候我們不需要捕獲,只是想要限制匹配,就會用到非捕獲組。如果你真明白了捕獲組,再看非捕獲組以及前瞻後顧就明白了。
❹ java正則表達式關於分組的問題,我能理解group(0)是匹配的全組
(\\w+\\s?)+
你這個是貪婪匹配,
匹配到「Love 」的時候會嘗試繼續匹配,它發現「Live 」也能匹配成功,
會把組信息更新成最後匹配的。
還有m.groupCount() ,這個只是獲取你的正則表達式的分組數,
跟你匹配不匹配沒關系,你正則表達式一個括弧,就返回1.
❺ Java常用的幾個正則方法
JAVA中正則表達式處理字元串的四個常用方法:匹配、分割、替換、截取。其跟字元串的常用函數相似,但是使用正則表達式會更簡單、更加簡潔。下面是具體的例子:
1 public class TestRegex {
2
3 public static void main(String[] args) {
4 String str = "";
5 String regex = "";
6
7 // 匹配
8 regex = "[1-9][a-z]";
9 getMatches(str, regex);
10
11 // 分割
12 str = "1a:abc123:";
13 regex = ":";
14 getSpilt(str, regex);
15
16 // 替換
17 str = "1223334444aaabbc";
18 String oldChar = "(.)\1+";
19 regex = "$1";
20 getReplace(str, oldChar, regex);
21
22 // 截取
23 str = "urlabc123";
24 regex = "(.*)";
25 getSubstring(str, regex);
26
27 }
28
29 public static void getMatches(String str, String regex) {
30 System.out.println(str.matches(regex));
31 }
32
33 public static void getSpilt(String str, String regex) {
34 String[] array = str.split(regex);
35 for (String t : array) {
36 System.out.println(t);
37 }
38 }
39
40 public static void getReplace(String str, String oldChar, String regex)
{
41 System.out.println(str.replaceAll(oldChar, regex));
42 }
43
44 public static void getSubstring(String str, String regex) {
45 Pattern p = Pattern.compile(regex);
46 Matcher m = p.matcher(str);
47 if (m.find()) {
48 System.out.println(m.group(1));
49 }
50 }
51 }
❻ Java正則表達式問題
\\D是匹配一個非數字,\\D*是匹配0個或多個非數字,盡可能多,(\\D*)是將匹配到的所有非數字捕獲到分組1以供需要時訪問。
\\d是匹配一個數字,\\d+是匹配1個或多個數字,盡可能多,(\\d+)是將匹配到的所有數字捕獲到分組2以供需要時訪問。
.是匹配任意一個字元,.*是匹配0個或多個任意字元,盡可能多,(.*)是將匹配到的多個任意字元捕獲到分組3以供需要時訪問。
m.group(下標)是訪問上面捕獲到的分組,下標0對應整個捕獲,下標1對應捕獲到的分組1,下標2對應捕獲到的分組2,以此類推。
所以,m.group(0)就是整個字元串,m.group(1)就是3000前面的所有字元,m.group(2)就是3000,m.group(3)就是3000後面的所有字元。
❼ java中正則表達式 分組
importjava.util.regex.*;
//表達式對象
Patternp=Pattern.compile("DR(\d{3})(New)R(\d)");
//創建Matcher對象
Matcherm=p.matcher("DR102NewR2");
//是否找到匹配
booleanfound=m.find();
if(found)
{
Stringgroup1=m.group(1);
Stringgroup2=m.group(2);
Stringgroup3=m.group(3);
}
應該是用group方法獲取,以上代碼沒測試過,大概是這個意思
❽ JavaSE基礎中正則表達式Matcher類的獲取功能--group(),解惑必採納,謝謝
在Java中,正則表達式是按照從左至右的順序對字元串進行掃描匹配的,首先,find()和group()都是Matcher類的函數,而不是String類的函數,所以find()和group()是對字元串從左至右掃描的函數,而不是對同一字元串反復掃描的函數.
比如m.find()函數,如果找到匹配的子字元串,它返回true,沒有找到匹配的子字元串,它返回false.當寫到while條件中時,它表示持續在原字元串中從左至右掃描,當發現有匹配的子字元串時,由m.group()捕獲並輸出,如果掃描到原字元串尾也沒有發現匹配的子字元串,則返回false,跳出循環.
以你的程序為例,m.find()函數會在原字元串中持續從左至右掃描三個字元的以空格為邊界的單詞,直到字元串尾,而不會反復從頭開始掃描原字元串,除非你在while循環中使用while(m.find(0)),m.find(0)表示從原字元串的第一個字元開始掃描匹配的子字元串,這樣程序會反復從原字元串的第一個字元開始掃描匹配的子字元串,會陷入無限循環.
也就是說,find()和group()函數,只會對原字元串從左至右掃描一遍,這樣當第二次while循環時,不會是從原字元串頭重新開始,而是從上一次匹配的位置後面開始第二次搜尋.
❾ java 正則表達式matcher.group()匹配多種結果的規則
這是由正則表達式的匹配策略所導致的,如果想要得到多個小的匹配結果你需要將正則表達式改為:
Stringreg="乘+(.*?)+車";
即可得到想要的結果:
具體原理你可以查看這個鏈接:http://blog.csdn.net/luoweifu/article/details/42759439 講的很詳細