String 类里面matches()方法。
正则表达式通过一些特定的符号来体现规则,因此需要掌握其特定的符号。
虽然简化了代码,但是阅读性变差。
1、正则表达式的规则:
字符类 | |
[abc] | a、b 或 c(简单类) |
[^abc] | 任何字符,除了 a、b 或 c(否定) |
[a-zA-Z] | a 到 z 或 A 到 Z,两头的字母包括在内(范围) |
[a-d[m-p]] | a 到 d 或 m 到 p:[a-dm-p](并集) |
[a-z&&[def]] | d、e 或 f(交集) |
[a-z&&[^bc]] | a 到 z,除了 b 和 c:[ad-z](减去) |
[a-z&&[^m-p]] | a 到 z,而非 m 到 p:[a-lq-z](减去) |
预定义字符类 | |
. | 任何字符(与行结束符可能匹配也可能不匹配) |
\d | 数字:[0-9] "\\d"写于规则内 |
\D | 非数字: [^0-9] |
\s | 空白字符:[ \t\n\x0B\f\r] |
\S | 非空白字符:[^\s] |
\w | 单词字符:[a-zA-Z_0-9] |
\W | 非单词字符:[^\w] |
Greedy 数量词 | |
X? | X,一次或一次也没有 |
X* | X,零次或多次 |
X+ | X,一次或多次 |
X{n} | X,恰好 n 次 |
X{n,} | X,至少 n 次 |
X{n,m} | X,至少 n 次,但是不超过 m 次 |
边界匹配器 | |
^ | 行的开头 |
$ | 行的结尾 |
\b | 单词边界 |
\B | 非单词边界 |
\A | 输入的开头 |
\G | 上一个匹配的结尾 |
\Z | 输入的结尾,仅用于最后的结束符(如果有的话) |
\z | 输入的结尾 |
2、正则表达式对字符串的常见操作:
a、匹配
其实使用的就是String类中的matches方法。
\\d{9}" 手机号码检验
b、切割
其实使用的就是String类中的split方法。
String str="zhangsan xiaobai dashu";
String []names=str.split(" +");
for (String name:names)
System.out.println(name);
String str="zhangsan.xiaobai.dashu";
String []names=str.split("\\.");
String str="zhangsanttttttxiaobaihhhhhhdashu";
String []names=str.split("(.)\\1+");
组的概念,()然后想成自动生成组别名称,从1开始。
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C)))
1((A)(B(C)))2\A3(B(C))4(C)
组零始终代表整个表达式。
c、替换
其实使用的就是String类中的replacAll()方法。
$对已有的正则表达式中的规则进行获取。
例1:将叠文替换成一个字符
String str="zhangsanttttttxiaobaihhhhhhdashu";
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);
String str="15832595623";
str=str.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
System.out.println(str);
d、获取
类 Pattern
正则表达式的编译表示形式。
java.util.regex
//将正则规则进行对象的封装
Pattern p = Pattern.compile("a*b");
//通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher
Matcher m = p.matcher("aaaaab");
//通过Matcher匹配器对象的方法对字符串进行操作
boolean b = m.matches();
示例:查找有三个字母的单词!
String str = "da jia hao, ming tian bu fang jia";
String regex = "\\b[a-z]{3}\\b";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while ( matcher.find())
System.out.println(matcher.group());
3、正则表达练习:
String text="我我..我我我...我我我我我..我要要要....要" +
"要要要..要要..学学学学学..学..编编..编编..编编...程程..程程";
text = text.replaceAll("\\.+","");
text = text.replaceAll("(.)\\1+","$1");
System.out.println(text);
b、对IP地址排序
TreeSet <String >treeSet= new TreeSet<String>();
ts.add(ip);
String ip_str="192.168.10.34 127.0.0.1 3.3.3.3 105.70.11.55";
ip_str = ip_str.replaceAll("(\\d+)","00$1");
ip_str = ip_str.replaceAll("0*(\\d{3})","$1");
String []ips = ip_str.split(" +");
TreeSet <String >treeSet= new TreeSet<String>();
for (String i:ips)
{
treeSet.add(i);
}
for (String i:treeSet){
System.out.println(i.replaceAll("0*(\\d+)","$1"));
}
c、对邮件地址校验
public static void main(String[] args) {
String mail = "abc1@sina.com.cn";
String regex ="[a-zA-Z0-9]\\w*@[a-zA-Z0-9]+(\\.[a-zA-Z]{1,3}){1,3}";
boolean b = mail.matches(regex);
System.out.println(mail+":"+b);
}
4、网络爬虫:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。