java正则表达式查找/替换
正则表达式相关知识: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 次或任意次。要匹配 "*" 字符本身,请使用 "\*" |
| | 左右两边表达式之间 "或" 关系。匹配 "|" 本身,请使用 "\|" |