正则表达式:字符串处理神器
正则表达式用途:
1). 字符串匹配
2). 字符串查找
3). 字符串替换
基础知识:
符号 说明
. 匹配一个字符
* 0 或者n个字符
+ 1个及以上字符
? 1个或者0个
^ 位于[]中表示取反,位于[]外面表示一行的开头
$ 一行的结尾
- 范围
I 或者
&& 且
\d 一个数字,同[0-9]
\D 非数字,同[^0-9]
\s 空白字符,[ \t\n\x0B\f\r]
\S 非空白符
\w 大小写字母和下斜杠,同[a-zA-Z_0-9]
\W [^\w]
\b 一个单词的边界
{n} 出现n次
{n,} 至少出现n次
{n,m} n到m次
[n-m] n到m中的一个
[abc] abc中的一个
[^abc] 除abc外的任意一个
[a-zA-Z] 大写字母或者小写字母中的一个,同[a-z]
[a-z&&[eFG]] 小写字母并且是eFG中的一个
在java中使用:
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
/***
* 抓取网页的Email
*/
public static void test5() {
try {
//先从网页保存一个页面,从读取文件内容
BufferedReader bufferedReader = new BufferedReader(new FileReader("D:\\桌面\\text\\html.html"));
String line = "";
while ((line = bufferedReader.readLine()) != null) {
catchEmail(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private static void catchEmail(String content) {
String reg = "[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(content);
while (m.find()) {
print(m.group());
}
}
/***
* 分组
*/
public static void test4() {
//用()分组表达式,分组的组号规则,整个是第0组,然后从左往右依次遇到“)”就算一组,逐渐+1
Pattern p = Pattern.compile("(\\d{3,5})([a-z]{2})");//整个第0组,3到5位的数字1组,两个小写字母2组,这里共3组,
String s = "1212ss-453bb-223ccc-23fdfd-deefeffe324";
Matcher m = p.matcher(s);
while (m.find()) {
print(m.group(0));//匹配第0组
print(m.group(1));
print(m.group(2));
}
}
/***
* 字符串替换
*/
public static void test3() {
Pattern pattern = Pattern.compile("java", Pattern.CASE_INSENSITIVE);//忽略大小写
Matcher matcher = pattern.matcher("Java java JAva JaVa I love Java youHate JAVA asasfd dda");
StringBuffer sb = new StringBuffer();
int i = 0;
while (matcher.find()) {//把匹配到的字符串,第技术
i++;
if (i % 2 == 0) {
matcher.appendReplacement(sb, "JAVA");
} else {
matcher.appendReplacement(sb, "java");
}
print(matcher.group());
}
matcher.appendTail(sb);//把尾部没有匹配的字符串加上
print(sb);
//print(matcher.replaceAll("JAVA"));//匹配到的全部替换为答谢的java
}
/***
* 得到匹配的字符串
*/
public static void test2() {
Pattern pattern = Pattern.compile("\\d{3,5}");
String s = "123-453456-3435-0";
Matcher matcher = pattern.matcher(s);
print(matcher.matches());//否有有匹配的
matcher.reset();//执行matches()方法之后再需要执行reset()方法,find()方法能正确匹配整个字符串
while (matcher.find()) {
print(matcher.group());
}
}
/***
* 匹配反斜杠和Email
*/
public static void test1() {
print("\\".matches("\\\\"));//Java中匹配一个反斜杠,需要四个\\\\
print(" \n".matches("^[\\s&&[^\\n]]*\\n$"));//空白行匹配:开头是个空白符,非换行符,任意多个或一个,结尾是换行符
print("[email protected]".matches("[\\w[.-]]+@[\\w[.-]]+\\.[\\w]+"));//匹配Email
}
public static void print(Object obj) {
System.out.println(obj);
}
}
常用的正则表达式:
^\d+$ //匹配非负整数(正整数 + 0)
^[0-9][1-9][0-9]$ //匹配正整数
^((-\d+)|(0+))$ //匹配非正整数(负整数 + 0)
^-[0-9][1-9][0-9]$ //匹配负整数
^-?\d+$ //匹配整数
^\d+(.\d+)?$ //匹配非负浮点数(正浮点数 + 0)
^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$ //匹配正浮点数
^((-\d+(.\d+)?)|(0+(.0+)?))$ //匹配非正浮点数(负浮点数 + 0)
^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$ //匹配负浮点数
^(-?\d+)(.\d+)?$ //匹配浮点数
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
^[\w-]+(.[\w-]+)*@[\w-]+(.[\w-]+)+$ //匹配email地址
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配HTML标记的正则表达式:/<(.)>.<\/\1>|<(.*) \/>/
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
正则表达式用例
1、^\S+[a-z A-Z]$ 不能为空 不能有空格 只能是英文字母
2、\S{6,} 不能为空 六位以上
3、^\d+$ 不能有空格 只能是数字
4、(.*)(.jpg|.bmp)$ 只能是jpg和bmp格式
5、^\d{4}-\d{1,2}-\d{1,2}$ 只能是2004-10-22格式
6、^0$ 至少选一项
7、^0{2,}$ 至少选两项
8、^[\s|\S]{20,}$ 不能为空 二十字以上
9、^+?a-z0-9*@([a-z0-9]+(.|-))+[a-z]{2,6}$邮件
10、\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)([,;]\s\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)) 输入多个地址用逗号或空格分隔邮件
11、^(([0-9]+))?[0-9]{7,8}$电话号码7位或8位或前面有区号例如(022)87341628
12、^[a-z A-Z 0-9 ]+@[a-z A-Z 0-9 ]+(.[a-z A-Z 0-9 ]+)+(,[a-z A-Z 0-9 ]+@[a-z A-Z 0-9 ]+(.[a-z A-Z 0-9 ]+)+)*$
只能是字母、数字、下划线;必须有@和.同时格式要规范 邮件
13 ^\w+@\w+(.\w+)+(,\w+@\w+(.\w+)+)*$上面表达式也可以写成这样子,更精练。
14 ^\w+((-\w+)|(.\w+))\@\w+((.|-)\w+).\w+$ [/size]
---------------------
作者:Mr_LGZ
来源:CSDN
原文:https://blog.csdn.net/lyl0724/article/details/75574677
版权声明:本文为博主原创文章,转载请附上博文链接!