(1)正则基础
发布时间:2020-12-14 02:03:43  所属栏目:百科  来源:网络整理 
            导读:包:java.util.regex 相关类:Pattern,Matcher,PatternSyntaxException 1. JDK API例子: 典型的调用顺序是 (*表示出现0次或多次;例子表示aaaaab是否匹配a*b格式) Pattern p = Pattern.("a*b"); Matcher m = p.("aaaaab"); boolean b = m.();compilemat
                
                
                
            
                        包:java.util.regex相关类:Pattern,Matcher,PatternSyntaxException1. JDK API例子:典型的调用顺序是 (*表示出现0次或多次;例子表示aaaaab是否匹配a*b格式)  
  
在仅使用一次正则表达式时,可以方便地通过此类定义   
  
String类的方法: public boolean matches(Stringregex)       boolean b = "aaaaab".matches("a*b"); 
2.常用简单方法(一些方法在String类中有实现)import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExamples {
	public static void main(String[] args) {
		// using pattern with flags
		Pattern pattern = Pattern.compile("ab",Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher("ABcabdAb");
		// using Matcher find(),group(),start() and end() methods
		while (matcher.find()) {
			System.out.println("Found the text "" + matcher.group()
					+ "" starting at " + matcher.start()
					+ " index and ending at index " + matcher.end());
		}
		// using Pattern split() method
		pattern = Pattern.compile("W");
		String[] words = pattern.split("one@two#three:four$five");
		System.out.print("Split using Pattern.split(): ");
		for (String s : words) {
			System.out.print(s + " ");
		}
		System.out.println();
		words = "one@two#three:four$five".split("W");
		System.out.print("Split using String.split(): ");
		for (String s : words) {
			System.out.print(s + " ");
		}
		System.out.println();
		// using Matcher.replaceFirst() and replaceAll() methods
		pattern = Pattern.compile("1*2");
		matcher = pattern.matcher("112345126782");
		System.out.println("Using matcher.replaceAll: "
				+ matcher.replaceAll("_"));
		System.out.println("Using matcher.replaceFirst: "
				+ matcher.replaceFirst("_"));
		System.out.println("Using String.replaceAll: "
				+ "112345126782".replaceAll("1*2","_"));
		System.out.println("Using String.replaceFirst: "
				+ "112345126782".replaceFirst("1*2","_"));
	}
} 
输出: Found the text "AB" starting at 0 index and ending at index 2 Found the text "ab" starting at 3 index and ending at index 5 Found the text "Ab" starting at 6 index and ending at index 8 Split using Pattern.split(): one two three four five Split using String.split(): one two three four five Using matcher.replaceAll: _345_678_ Using matcher.replaceFirst: _345126782 Using String.replaceAll: _345_678_ Using String.replaceFirst: _345126782  
 | 
                  ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 字符类 | |
|---|---|
| [abc] | a、b 或 c(简单类) | 
| [^abc] | 任何字符,除了 a、b 或 c(否定) | 
| [a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) | 
| [a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) | 
| [a-z&&[def]] | d、e 或 f(交集) | 
| [a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) | 
| [a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) | 
| 预定义字符类 | |
|---|---|
| . | 任何字符(与行结束符可能匹配也可能不匹配) | 
| d | 数字:[0-9] | 
| D | 非数字: [^0-9] | 
| s | 空白字符:[ tnx0Bfr] | 
| S | 非空白字符:[^s] | 
| w | 单词字符:[a-zA-Z_0-9] | 
| W | 非单词字符:[^w] | 
| 边界匹配器 | |
|---|---|
| ^ | 行的开头 | 
| $ | 行的结尾 | 
| b | 单词边界 | 
| B | 非单词边界 | 
| A | 输入的开头 | 
| G | 上一个匹配的结尾 | 
| Z | 输入的结尾,仅用于最后的结束符(如果有的话) | 
| z | 输入的结尾 | 
| Greedy 数量词 | |
|---|---|
| X? | X,一次或一次也没有 | 
| X* | X,零次或多次 | 
| X+ | X,一次或多次 | 
| X{n} | X,恰好 n 次 | 
| X{n,} | X,至少 n 次 | 
| X{n,m} | X,至少 n 次,但是不超过 m 次 | 
几个例子
public class RegexExpression {
	
	public static void main(String[] args) {
		System.out.println(""a".matches("[abc]") --> 匹配a/b/c: "
				+ "a".matches("[abc]"));
		System.out.println(""aab".matches("[abc]+") --> a/b/c出现一次或多次: "
				+ "aab".matches("[abc]+"));
		System.out.println("" @aab".matches("sW?w{1,5}") --> 空白字符+非单词字符至多一次+单词字符1到5次: "
				+ " @aab".matches("sW?w{1,5}"));
		System.out.println(""xa@c2".matches("^[^abc].+[123]$") --> 非a/b/c开头+任意字符1次或多次+1/2/3结尾: "
				+ "xa@c2".matches("^[^abc].+[123]$"));
		
	}
}
 
输出:
"a".matches("[abc]") --> 匹配a/b/c: true
"aab".matches("[abc]+") --> a/b/c出现一次或多次: true
" @aab".matches("sW?w{1,5}") --> 空白字符+非单词字符至多一次+单词字符1到5次: true
"xa@c2".matches("^[^abc].+[123]$") --> 非a/b/c开头+任意字符1次或多次+1/2/3结尾: true 
参考: 
http://www.52php.cn/article/p-hnnbfqms-nd.html                        (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
