正则表达式(Regular Expression)高级使用(文本编辑器,数据库
一、开发环境和文本编辑器中使用正则表达式 二、数据库中也可以使用正则表达式 SELECT prod_name FROM products WHERE prod_name REGEXP '.000'
.匹配任意字符 三、Java程序中使用正则表达式 类Pattern: 类Matcher: 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());
}
}
运行结果: 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));
}
}
}
运行结果: 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));
}
}
}
运行结果: 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));
}
}
运行结果: 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[sS]+?</a>
/*Pattern pattern = Pattern.compile("<a[sS]+?</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();
}
}
运行结果: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |