馬士兵 正則表達式的學習(補充)
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