正則表達式之零寬斷言

正則表達式之零寬斷言

用於查找在某些內容(但並不包括這些內容)以前或以後的東西java

  1. 零寬度正預測先行斷言 - (?=exp)正則表達式

    匹配exp前面的位置測試

    正則表達式:.+(?=://)
     原始字符串:http://localhost:8080/awesome-god?love=1000&believe=true
     獲得的結果:http
  2. 零寬度正回顧後發斷言 - (?<=exp).net

    匹配exp後面的位置code

    正則表達式:(?<=\?).+
     原始字符串:http://localhost:8080/awesome-god?love=1000&believe=true
     獲得的結果:love=100&believe=true
  3. 零寬度負預測先行斷言 - (?!exp)blog

    匹配後面跟的不是exp的位置文檔

    正則表達式:\d{4}(?!&)
     原始字符串:http://localhost:8080/awesome-god?love=1000&believe=true
     獲得的結果:8080
  4. 零寬度負回顧後發斷言 - (?<!exp)字符串

    匹配前面不是exp的位置get

    正則表達式:(?<!=)\d{4}
     原始字符串:http://localhost:8080/awesome-god?love=1000&believe=true
     獲得的結果:8080

附Java測試代碼:it

  1. 完整代碼

    import java.util.Arrays;
     import java.util.LinkedList;
     import java.util.List;
     import java.util.regex.Matcher;
     import java.util.regex.Pattern;
    
     /**
      * Some tools for Regex
      */
     public class RegexUtils {
    
     	/**
     	 * 根據正則表達式提取字符串
     	 * [@param](https://my.oschina.net/u/2303379) str
     	 * [@param](https://my.oschina.net/u/2303379) regex
     	 * [@return](https://my.oschina.net/u/556800)
     	 */
     	public static String[] find(String str, String regex) {
     		if (isEmpty(str)) {
     			return new String[0];
     		}
     		Pattern pattern = Pattern.compile(regex);
     		Matcher matcher = pattern.matcher(str);
     		List<String> list = new LinkedList<>();
     		while(matcher.find()) {
     			list.add(matcher.group());
     		}
     		return list.toArray(new String[list.size()]);
     	}
    
     	public static void main(String[] args) {
     		String[] array;
     		String str = "http://localhost:8080/awesome-god?love=1000&believe=true";
    
     		array = find(str, ".+(?=://)");
     		System.out.println("1. 零寬度正預測先行斷言 - (?=exp): " + Arrays.toString(array));
    
     		array = find(str, "(?<=\\?).+");
     		System.out.println("2. 零寬度正回顧後發斷言 - (?<=exp): " + Arrays.toString(array));
    
     		array = find(str, "\\d{4}(?!&)");
     		System.out.println("3. 零寬度負預測先行斷言 - (?!exp): " + Arrays.toString(array));
    
     		array = find(str, "(?<!=)\\d{4}");
     		System.out.println("4. 零寬度負回顧後發斷言 - (?<!exp): " + Arrays.toString(array));
     	}
     }
  2. 輸出結果

    1. 零寬度正預測先行斷言 - (?=exp): [http]
     2. 零寬度正回顧後發斷言 - (?<=exp): [love=1000&believe=true]
     3. 零寬度負預測先行斷言 - (?!exp): [8080]
     4. 零寬度負回顧後發斷言 - (?<!exp): [8080]

參考文檔:正則表達式之零寬斷言

相關文章
相關標籤/搜索