正則表達式相關知識:http://www.jb51.net/article/16829.htm
查找
如利用正則表達取得oracle的建表語句中的表的注釋
matcher.group(0)找到的就是完全匹配整個regex的部分
這個group是根據regex中的括號來的幾個括號就分幾個組
如下的例子中就是matcher.group(2)就是我想要找的東西了
String newSql = "COMMENT ON TABLE agency_info IS 'xxx基本信息';"; String tableComment = "COMMENT\\s+ON\\s+TABLE\\s+([a-z]|[A-Z]|_)+\\s+IS\\s+'([^']+)'" ; Pattern pattern = Pattern.compile(tableComment) ; Matcher matcher = pattern.matcher(newSql) ; while(matcher.find()){ int count = matcher.groupCount() ; for (int i = 0; i <= count; i++) { String ret = matcher.group(i) ; System.out.println(ret); } }
替換
StringBuffer sb = new StringBuffer() ; Pattern p = Pattern.compile("@[[a-z]|[A-Z]|_]+") ; Matcher m = p.matcher("xx@fff/xylsjd") ; while( m.find() ){ String tmp = m.group() ; String v = "要替換成字符串"; //注意,在替換字符串中使用反斜線 (\) 和美元符號 ($) 可能導致與作為字面值替換字符串時所產生的結果不同。 //美元符號可視為到如上所述已捕獲子序列的引用,反斜線可用於轉義替換字符串中的字面值字符。 v = v.replace("\\", "\\\\").replace("$", "\\$"); //替換掉查找到的字符串 m.appendReplacement(sb, v) ; } //別忘了加上最后一點 m.appendTail(sb) ; System.out.print(sb);
字符 | 說明 |
^ | 匹配輸入字符串的開始位置。要匹配 "^" 字符本身,請使用 "\^" |
$ | 匹配輸入字符串的結尾位置。要匹配 "$" 字符本身,請使用 "\$" |
( ) | 標記一個子表達式的開始和結束位置。要匹配小括號,請使用 "\(" 和 "\)" |
[ ] | 用來自定義能夠匹配 '多種字符' 的表達式。要匹配中括號,請使用 "\[" 和 "\]" |
{ } | 修飾匹配次數的符號。要匹配大括號,請使用 "\{" 和 "\}" |
. | 匹配除了換行符(\n)以外的任意一個字符。要匹配小數點本身,請使用 "\." |
? | 修飾匹配次數為 0 次或 1 次。要匹配 "?" 字符本身,請使用 "\?" |
+ | 修飾匹配次數為至少 1 次。要匹配 "+" 字符本身,請使用 "\+" |
* | 修飾匹配次數為 0 次或任意次。要匹配 "*" 字符本身,請使用 "\*" |
| | 左右兩邊表達式之間 "或" 關系。匹配 "|" 本身,請使用 "\|" |