正则表达式--操作字符串a

String 类里面matches()方法。

正则表达式通过一些特定的符号来体现规则,因此需要掌握其特定的符号。

虽然简化了代码,但是阅读性变差。

1、正则表达式的规则:

字符类
[abc]abc(简单类)
[^abc]任何字符,除了 abc(否定)
[a-zA-Z]azAZ,两头的字母包括在内(范围)
[a-d[m-p]]admp[a-dm-p](并集)
[a-z&&[def]]def(交集)
[a-z&&[^bc]]az,除了 bc[ad-z](减去)
[a-z&&[^m-p]]az,而非 mp[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方法。
regexp="1[358] \\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\A
3(B(C))
4(C)

组零始终代表整个表达式。 

c、替换

其实使用的就是String类中的replacAll()方法。

$对已有的正则表达式中的规则进行获取。

例1:将叠文替换成一个字符
String str="zhangsanttttttxiaobaihhhhhhdashu";
str=str.replaceAll("(.)\\1+","$1");
System.out.println(str);

例2:电话号码保密,158****5623
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、正则表达练习:

a、治疗口吃
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社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。


其实就是一个程序用于在互联网中获取符合制定规则的数据。









































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值