正则表达式(Regular Expression)高级使用(文本编辑器,数据库,Java)
2015-04-30 10:51
399 查看
一、开发环境和文本编辑器中使用正则表达式
eclipse
Notepad++
EditPlus
UltraEdit
二、数据库中也可以使用正则表达式
Mysq15.5以上
Oracle10g以上
例如:
.匹配任意字符
三、Java程序中使用正则表达式
相关类位于:java.util.regex包下面
类Pattern:
正则表达式的编译表示形式。
Pattern p=Pattern.compile(r,int); //建立正则表达式,并启用相应模式。
类Matcher:
通过解释Pattern对character sequence执行匹配操作的引擎
Matcher m=p.matcher(str); //匹配str字符串
运行结果:
true
true
false
false
运行结果:
dfsdfsd
dfsdfsd
43324
43324
运行结果:
aads32
aads
32
da43324
da
43324
dsaf32
dsaf
32
运行结果:
aads##&&da#####**dsaf##
[a, b, c]
[a, b, c]
运行结果:
http://www.nuomi.com/?cid=bdsywzl
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://news.baidu.com
http://www.hao123.com
http://map.baidu.com
http://v.baidu.com
http://tieba.baidu.com
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://www.baidu.com/gaoji/preferences.html
http://www.baidu.com/more/
http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=
http://tieba.baidu.com/f?kw=&fr=wwwt
http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt
http://music.baidu.com/search?fr=ps&ie=utf-8&key=
http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=
http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&ie=utf-8&word=
http://map.baidu.com/m?word=&fr=ps01000
http://wenku.baidu.com/search?word=&lm=0&od=0&ie=utf-8
http://home.baidu.com
http://ir.baidu.com
http://www.baidu.com/duty/
http://jianyi.baidu.com/
eclipse
Notepad++
EditPlus
UltraEdit
二、数据库中也可以使用正则表达式
Mysq15.5以上
Oracle10g以上
例如:
SELECT prod_name FROM products WHERE prod_name REGEXP '.000'
.匹配任意字符
三、Java程序中使用正则表达式
相关类位于:java.util.regex包下面
类Pattern:
正则表达式的编译表示形式。
Pattern p=Pattern.compile(r,int); //建立正则表达式,并启用相应模式。
类Matcher:
通过解释Pattern对character sequence执行匹配操作的引擎
Matcher m=p.matcher(str); //匹配str字符串
package regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo01 { public static void main(String[] args) { //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:\w+ //表达式对象 Pattern pattern = Pattern.compile("\\w+"); //创建Matcher对象 Matcher matcher = pattern.matcher("dfsdfsd&&43324");//尝试将整个字符串序列与该模式匹配 //boolean yesno = matcher.matches(); //System.out.println(yesno); //flase //boolean yesno2 = matcher.find();//该方法扫描输入的序列,查找与该模式匹配的下一个子序列 //System.out.println(yesno2); //true System.out.println(matcher.find()); System.out.println(matcher.find()); System.out.println(matcher.find()); System.out.println(matcher.find()); } }
运行结果:
true
true
false
false
package regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 测试正则表达式基本用法 * @author liguodong * */ public class Demo02 { public static void main(String[] args) { //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:\w+ //表达式对象 Pattern pattern = Pattern.compile("\\w+"); //创建Matcher对象 Matcher matcher = pattern.matcher("dfsdfsd&&43324");//尝试将整个字符串序列与该模式匹配 /*System.out.println(matcher.find()); System.out.println(matcher.group()); System.out.println(matcher.find()); System.out.println(matcher.group());*/ while(matcher.find()) { System.out.println(matcher.group());//group()与group(0)匹配整个表达式的子字符串 System.out.println(matcher.group(0)); } } }
运行结果:
dfsdfsd
dfsdfsd
43324
43324
package regexp; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 测试正则表达式对象中分组的处理 * @author liguodong * */ public class Demo03 { public static void main(String[] args) { //表达式对象 分组1 分组2 Pattern pattern = Pattern.compile("([a-z]+)([0-9]+)"); //创建Matcher对象 Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//尝试将整个字符串序列与该模式匹配 while(matcher.find()) { System.out.println(matcher.group());//group()与group(0)匹配整个表达式的子字符串 //System.out.println(matcher.group(0)); System.out.println(matcher.group(1)); System.out.println(matcher.group(2)); } } }
运行结果:
aads32
aads
32
da43324
da
43324
dsaf32
dsaf
32
package regexp; import java.util.Arrays; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 测试正则表达式的对象其他操作 * @author liguodong * */ public class Demo04 { public static void main(String[] args) { //在这个字符串:dfsdfsd43324,是否符合指定的正则表达式:\w+ //表达式对象 Pattern pattern = Pattern.compile("[0-9]"); //创建Matcher对象 Matcher matcher = pattern.matcher("aads32&&da43324**dsaf32");//尝试将整个字符串序列与该模式匹配 //替换 String newString = matcher.replaceAll("#"); System.out.println(newString);//aads##&&da#####**dsaf## /////////////////////////////////// //分隔 String string = "a,b,c"; String[] arrs = string.split(","); System.out.println(Arrays.toString(arrs)); String string1 = "a32b323c32"; String[] arrs1 = string1.split("\\d+"); System.out.println(Arrays.toString(arrs1)); } }
运行结果:
aads##&&da#####**dsaf##
[a, b, c]
[a, b, c]
package regexp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 网络爬虫取链接 wget * @author liguodong */ public class WebSpider { public static void main(String[] args) { String destString = getURLContent("http://www.baidu.com"); //System.out.println(destString); //1、 获取超链接整个内容<a></a> //<a[\s\S]+?</a> /*Pattern pattern = Pattern.compile("<a[\\s\\S]+?</a>"); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); }*/ //2、 获取href的内容 /*Pattern pattern = Pattern.compile("href=\".+?\""); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); }*/ //3、 获取超链接的地址 //采用预搜索(零宽断言) 或者 通过程序里面加括号进行分组 /*Pattern pattern = Pattern.compile("href=\"(.+?)\""); Matcher matcher = pattern.matcher(destString); while(matcher.find()){ System.out.println(matcher.group()); System.out.println(matcher.group(1)); }*/ List<String> resultList = getMatherSubstrs(destString, "href=\"(h.+?)\""); for (String string : resultList) { System.out.println(string); } } public static List<String> getMatherSubstrs(String destStr,String regexStr){ //4、 获取超链接的地址 //采用预搜索(零宽断言) 或者 通过程序里面加括号进行分组 Pattern pattern = Pattern.compile(regexStr); Matcher matcher = pattern.matcher(destStr); List<String> result = new ArrayList<String>(); while(matcher.find()){ /*System.out.println(matcher.group()); System.out.println(matcher.group(1));*/ result.add(matcher.group(1)); } return result; } /** * 获得urlStr网页源码的内容 * @param urlStr * @return */ public static String getURLContent(String urlStr){ StringBuilder sb = new StringBuilder(); try { URL url = new URL(urlStr); BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream())); String tempString = ""; while((tempString=reader.readLine())!=null){ //System.out.println(tempString); sb.append(tempString); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sb.toString(); } }
运行结果:
http://www.nuomi.com/?cid=bdsywzl
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://news.baidu.com
http://www.hao123.com
http://map.baidu.com
http://v.baidu.com
http://tieba.baidu.com
https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F
http://www.baidu.com/gaoji/preferences.html
http://www.baidu.com/more/
http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=
http://tieba.baidu.com/f?kw=&fr=wwwt
http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt
http://music.baidu.com/search?fr=ps&ie=utf-8&key=
http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=
http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&ie=utf-8&word=
http://map.baidu.com/m?word=&fr=ps01000
http://wenku.baidu.com/search?word=&lm=0&od=0&ie=utf-8
http://home.baidu.com
http://ir.baidu.com
http://www.baidu.com/duty/
http://jianyi.baidu.com/
相关文章推荐
- JAVA 使用哈希表操作数据库的例子 Using Hashtables to Store & Extract results from a Database.
- 使用 Hibernate 将 Java 对象持久保存到 IBM DB2 通用数据库中
- Java使用正则表达式将UBB的img表达方法转换成html样式
- 使用JAVA的串行化打造自己的“对象数据库”
- [JAVA100例]052、使用ODBC连接数据库
- 使用JDBC连接ODBC数据库的Java代码
- Java高级编程:使用打印服务API
- 学习在Java中使用嵌入式数据库Derby
- 使用纯JAVA连接SQL SERVER 数据库的例子
- 使用 Java 5 RowSet 新特性访问 IBM DB2 数据库
- java连接postgreSQL数据库简单使用
- 使用JAVA的串行化打造自己的“对象数据库
- 目前使用的JAVA数据库链接管理类
- java基础-使用jdbc访问数据库
- java中使用数据库大权
- java 数据库基本操作及ResultSet高级应用
- 使用Java的Swing操作进度条高级操作
- 高级 XML 验证-使用 XSLT 和 Java 扩展验证 XML 文档中的复杂约束
- NetBeans下使用Java Persistence API修改数据库表行(一)
- NetBeans下使用Java Persistence API修改数据库表行(二)