847
技術社區[雲棲]
馬士兵 正則表達式的學習(補充)
none-capturing groups
特殊構造(非捕獲)
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}");//三個字母 String s = "44a66b"; Matcher m = p.matcher(s); while(m.find()) { p(m.group());//找到兩個字串 } } public static void p(Object o) { System.out.println(o); } }
輸出:
44a
66b
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}(?=a)");//三個字母的後麵出現一個a,不捕獲a String s = "44a66b"; Matcher m = p.matcher(s); while(m.find()) { p(m.group());//顯示不了 } } public static void p(Object o) { System.out.println(o); } }
輸出:
無任何顯示信息
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}(?=a)");//三個字母的後麵出現一個a,不捕獲a String s = "444a66b"; Matcher m = p.matcher(s);//捕獲3個字母,不捕獲a while(m.find()) { p(m.group());//顯示不了 } } public static void p(Object o) { System.out.println(o); } }
輸出:
444
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile("(?=a).{3}");//符合條件就捕獲,不符合條件就不捕獲 String s = "444a66b"; Matcher m = p.matcher(s); while(m.find()) { p(m.group()); } } public static void p(Object o) { System.out.println(o); } }
輸出:
a66
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile("(?!a).{3}");//前麵不能是a的 String s = "444a66b"; Matcher m = p.matcher(s); while(m.find()) { p(m.group()); } } public static void p(Object o) { System.out.println(o); } }
輸出:
444
66b
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}(?!a)"); String s = "444a66b";//後麵跟著的不是a Matcher m = p.matcher(s); while(m.find()) { p(m.group()); } } public static void p(Object o) { System.out.println(o); } }
輸出:
44a
66b
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}(?<!a)");//從後往前數不是a String s = "444a66b";//444從後往前不是a,a66從後往前不是a Matcher m = p.matcher(s); while(m.find()) { p(m.group()); } } public static void p(Object o) { System.out.println(o); } }
輸出:
444
a66
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //non-capturing groups Pattern p = Pattern.compile(".{3}(?<=a)");//從後往前數不是a String s = "444a66b";//444從後往前不是a,a66從後往前是a Matcher m = p.matcher(s); while(m.find()) { p(m.group()); } } public static void p(Object o) { System.out.println(o); } }
輸出:
44a
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //back references向前引用 Pattern p=Pattern.compile("(\\d\\d)\\1");// \\d\\d代表兩個數字 \\1代表第一個組捕獲的字符串 String s="1212"; Matcher m=p.matcher(s); p(m.matches()); } public static void p(Object o) { System.out.println(o); } }
輸出:
true
比較:
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //back references向前引用 Pattern p=Pattern.compile("(\\d\\d)\\1");// \\d\\d代表兩個數字 \\1代表第一個組捕獲的字符串 String s="1213"; Matcher m=p.matcher(s); p(m.matches()); } public static void p(Object o) { System.out.println(o); } }
輸出:
false
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //back references向前引用 Pattern p=Pattern.compile("(\\d(\\d))\\2");// 兩個組,看到一個左(是一個組!!! 2代表和第二個組匹配 String s="122";//第一個組是1 第二個組是2 2和第二個組匹配 Matcher m=p.matcher(s); p(m.matches()); } public static void p(Object o) { System.out.println(o); } }
輸出:
true
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //flags的簡寫 Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//大寫小忽略 } public static void p(Object o) { System.out.println(o); } }輸出:
true
package com.zzk.cn; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Test { /** * @param args */ public static void main(String[] args) { //flags的簡寫 //Pattern p=Pattern.compile("java",Pattern.CASE_INSENSITIVE);//大寫小忽略 p("Java".matches("(?i)(java)"));//以上的簡寫 } public static void p(Object o) { System.out.println(o); } }
輸出:
true
CASE_INSENSITIVE
public static final int CASE_INSENSITIVE
- 啟用不區分大小寫的匹配。
默認情況下,不區分大小寫的匹配假定僅匹配 US-ASCII 字符集中的字符。可以通過指定
UNICODE_CASE
標誌連同此標誌來啟用 Unicode 感知的、不區分大小寫的匹配。通過嵌入式標誌表達式 (?i) 也可以啟用不區分大小寫的匹配。
指定此標誌可能對性能產生一些影響。
- 另請參見:
(?idmsux-idmsux) Nothing,但是將匹配標誌i d
m s u x on - off
不寫就是關上,寫了就是打開
最後更新:2017-04-02 06:52:15