一、开发环境和文本编辑器中使用正则表达式
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,c]
[a,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/