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
public static final int CASE_INSENSITIVE
默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。可以通过指定 UNICODE_CASE
标志连同此标志来启用 Unicode 感知的、不区分大小写的匹配。
通过嵌入式标志表达式 (?i) 也可以启用不区分大小写的匹配。
指定此标志可能对性能产生一些影响。
(?idmsux-idmsux) Nothing,但是将匹配标志i d m s u x on - off
不写就是关上,写了就是打开