一,正则表达式基本知识:
操作复杂的文本:
(1)普通字符:
字母,数字,汉字,下划线,以及没有特殊定义的标点符号,都是“普通字符”。表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的一个字符。
简单的转义字符:
(2)标准字符集合
注意区分大小写,大写是相反的意思
(3)自定义字符集合
[]匹配方式,可以匹配方括号中任意一个字符
(4)量词
(5)字符边界
(6)正则语法之选择符和分组以及反向引用。
(7)预搜索
二,正则表达式匹配模式
三,常用正则表达式
四,JAVA程序中如何使用正则表达式
import java.util.regex.Matcher;
import java.util.regex.Pattern;
//一, 测试正则表达式对象的基本用法
public class Demo01 {
public static void main(String[] args) {
//在这个字符串:asfsdf23323,是否符合指定的正则表达式:\w+
//表达式对象
Pattern p = Pattern.compile("\\w+");
//创建Matcher对象
Matcher m = p.matcher("asfsdf2&&3323");
// boolean yesorno = m.matches(); //尝试将整个字符序列与该模式匹配
// System.out.println(yesorno);
// boolean yesorno2 = m.find(); //该方法扫描输入的序列,查找与该模式匹配的下一个子序列
// System.out.println(yesorno2);
// System.out.println(m.find());
// System.out.println(m.group());
// System.out.println(m.find());
// System.out.println(m.group());
while(m.find()){
System.out.println(m.group()); //group(),group(0)匹配整个表达式的子字符串
System.out.println(m.group(0));
}
}
}
//二,正则对象中分组的处理:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 测试正则表达式对象中分组的处理
* @author Administrator
*
*/
public class Demo02 {
public static void main(String[] args) {
//在这个字符串:asfsdf23323,是否符合指定的正则表达式:\w+
//表达式对象
Pattern p = Pattern.compile("([a-z]+)([0-9]+)");
//创建Matcher对象
Matcher m = p.matcher("aa232**ssd445*sds223");
while(m.find()){
System.out.println(m.group()); //group(),group(0)匹配整个表达式的子字符串
System.out.println(m.group(1));
System.out.println(m.group(2));
}
}
}
//三,正则对象的替换操作
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 测试正则表达式对象的替换操作
* @author Administrator
*
*/
public class Demo03 {
public static void main(String[] args) {
//表达式对象
Pattern p = Pattern.compile("[0-9]");
//创建Matcher对象
Matcher m = p.matcher("aa232**ssd445*sds223");
//替换
String newStr = m.replaceAll("#");
System.out.println(newStr);
}
}
//四,正则对象对分割字符串的操作:
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 测试正则表达式对象的分割字符串的操作
* @author Administrator
*
*/
public class Demo04 {
public static void main(String[] args) {
String str = "a232b4334c3434";
String[] arrs = str.split("\\d+");
System.out.println(Arrays.toString(arrs));
}
}
五,正则表达式在JAVA中的应用
//正则主要是处理一下复杂的文本,网络爬虫的原理的代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* 网络爬虫取链接
* @author Administrator
*
*/
public class WebSpiderTest {
/**
* 获得urlStr对应的网页的源码内容
* @param urlStr
* @return
*/
public static String getURLContent(String urlStr,String charset){
StringBuilder sb = new StringBuilder();
try {
URL url = new URL(urlStr);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream(),Charset.forName(charset)));
String temp = "";
while((temp=reader.readLine())!=null){
sb.append(temp);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return sb.toString();
}
public static List<String> getMatherSubstrs(String destStr,String regexStr){
Pattern p = Pattern.compile(regexStr); //取到的超链接的地址
Matcher m = p.matcher(destStr);
List<String> result = new ArrayList<String>();
while(m.find()){
result.add(m.group(1));
}
return result;
}
public static void main(String[] args) {
String destStr = getURLContent("http://www.163.com","gbk");
// Pattern p = Pattern.compile("<a[\\s\\S]+?</a>"); //取到的超链接的整个内容
List<String> result = getMatherSubstrs(destStr, "href=\"([\\w\\s./:]+?)\"");
for (String temp : result) {
System.out.println(temp);
}
}
}
PS:资料主要来源于尚学堂