马士兵 正则表达式的学习(补充)
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