正則表達式一般用於字符串匹配、查找、替換、分割。例如:從網頁中找出email地址,IP地址是否正確,從網頁中找出連接等等。
符號 |
意思 |
\|反斜槓 |
|
\t |
間隔(’\u0009’) |
\n |
換行(’\u000A’) |
\r |
回車(’\u000D’) |
\d |
數字 等價於[0-9] |
\D |
非數字 等價於[^0-9] |
\s |
空白符號 等價於[\t\n\x0B\f\r] |
\S |
非空白符號 等價於[^\t\n\x0B\f\r] |
\w |
單獨字符 等價於[a-zA-Z_0-9] |
\W |
非單獨字符 等價於[^a-zA-Z_0-9] |
\f |
換頁符 |
\e |
Escape |
\b |
一個單詞的邊界 |
\B |
一個非單詞的邊界 |
\G |
前一個匹配的結束 |
^ |
限制開頭 ^java 條件限制爲以Java爲開頭字符 |
$ |
限制結尾 java$ 條件限制爲以java爲結尾字符 |
. |
限制除\n以外任意一個單獨字符 java.. 條件限制爲java後除換行外任意兩個字符 |
[a-z] |
條件限制在小寫a to z範圍中一個字符 |
[A-Z] |
條件限制在大寫A to Z範圍中一個字符 |
[a-zA-Z] |
條件限制在小寫a to z或大寫A to Z範圍中一個字符 |
[0-9] |
條件限制在小寫0 to 9範圍中一個字符 |
[0-9a-z] |
條件限制在小寫0 to 9或a to z範圍中一個字符 |
[0-9[a-z]] |
條件限制在小寫0 to 9或a to z範圍中一個字符(交集) |
[^a-z] |
條件限制在非小寫a to z範圍中一個字符 |
[^A-Z] |
條件限制在非大寫A to Z範圍中一個字符 |
[^a-zA-Z] |
條件限制在非小寫a to z或大寫A to Z範圍中一個字符 |
[^0-9] |
條件限制在非小寫0 to 9範圍中一個字符 |
[^0-9a-z] |
條件限制在非小寫0 to 9或a to z範圍中一個字符 |
[^0-9[a-z]] |
條件限制在非小寫0 to 9或a to z範圍中一個字符(交集) |
* |
限制條件爲特定字符出現0次以上,例如, J* 0個以上J;.* 0個以上任意字符;J.*D J與D之間0個以上任意字符 |
+ |
限制條件爲特定字符出現1次以上。 J+ 1個以上J ; .+ 1個以上任意字符; J.+D J與D之間1個以上任意字符。 |
? |
限制條件爲特定字符出現有0或1次以上。例如,JA? J或者JA出現。 |
{} |
限制條件爲連續出現指定次數字符。 例如, J{2} JJ; J{3} JJJ; J{3,} JJJ,JJJJ,JJJJJ…..(3次以上J並存);J{a,b} 有a個以上,b個以下的J |
| |
限制條件爲兩者取一。例如,Java |
舉例
Pattern pattern = Pattern.compile("^Java.*");
Matcher matcher = pattern.matcher("Java不是人。");
boolean b = matcher.matches();
System.out.print(b+"");
/**
* 結果爲: true
*/
Pattern pattern = Pattern.compile("[,|]+");
String[] strs = pattern.split("Java Hello World Java,Hello,,World|Sun");
for (String str:strs) {
System.out.print(str+" ");
}
/**
* 結果爲: Java Hello World Java Hello World Sun
*/
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
System.out.print(matcher.replaceFirst("Java"));
/**
* 結果爲: Java Hello World,正則表達式 Hello World
*/
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
System.out.print(matcher.replaceAll("Java"));
/**
* 結果爲: Java Hello World,Java Hello World
*/
Pattern pattern = Pattern.compile("正則表達式");
Matcher matcher = pattern.matcher("正則表達式 Hello World,正則表達式 Hello World");
StringBuffer sbr = new StringBuffer();
while (matcher.find()){
matcher.appendReplacement(sbr,"Java");
}
matcher.appendTail(sbr);
System.out.print(sbr.toString());
/**
* 結果爲: Java Hello World,正則表達式 Hello World
*/
String str = "[email protected]";
Pattern pattern = Pattern.compile("\\w+([-+.]\\w+)*@([\\w\\-]+\\.)+[\\w-]+");
Matcher matcher = pattern.matcher(str);
System.out.print(matcher.matches() + "");
/**
* 結果爲: true
*/
Pattern pattern = Pattern.compile("<[^>]+>");
Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主頁</a>");
System.out.print(matcher.replaceAll(""));
/**
* 結果爲: 主頁
*/
Pattern pattern = Pattern.compile("href=/\"(.+?)/\"");
Matcher matcher = pattern.matcher("<a href=/\"index.html/\">主頁</a>");
if (matcher.find()) {
System.out.print(matcher.group(1));
}
/**
* 結果爲: index.html
*/
Pattern pattern = Pattern.compile("https?://[\\w.]*");
Matcher matcher = pattern.matcher("dsdsds<http://dsds//gfgffdfd>fdf");
if (matcher.find()) {
System.out.print(matcher.group());
}
/**
* 結果爲: http://dsds
*/
比較常用的正則表達式
字符 |
代表意義 |
[\u4e00-\u9fa5] |
匹配中文字符 |
\n\s*\r |
匹配空白行,可用來刪除空白行 |
^\s*|\s*$ |
匹配首尾空白字符 |
\w+([-+.]\w+)*@\w+([-+.]\w+)* |
驗證Email地址 |
https?://[^\s]* |
匹配URL地址 |