java基础_14_正则表达式
来源:互联网 发布:linux help分段显示 编辑:程序博客网 时间:2024/04/30 09:29
用于对字符串进行操作。
好处:可以简化对字符串的复杂操作
弊端:符号定义越多,正则越长,阅读性越差
注意:在写预定义字符类时 \和字母都是一个整体,因\本身是一个转义字符,所以如\d 要写成 \\d
常用功能:
1,匹配 matches(String regex)。
匹配过程中只要有一个不符全规则,就结束,返回false
例:
要求:一串数字 1,长度为5-10 2,0不能开头 3,帐号只能是数字
public void method(String qq) { String regex = "[1-9][0-9]{4,9}"; /* 意思:第一位数在1-9之间,第二位数在0-9之间,第二位可以有4-9个数字。 {}表示数量,看java.util.regex或 matches(String regex) */ boolean flag = qq.matches(regex); if(flag) System.out.println("qq "+qq); else System.out.println("帐号不对"); }
要求:匹配电话号码:开头只能是 13*******;或15******;或18*******;
String regex = "1[358][0-9]{9}";
或写成String regex = "1[358]\\d{9}";
//解说:第一位必须是1,第二位只能是3,5,8,第三位开始只能是9位且满足0-9
网页爬虫(蜘蛛)
--> 把满足邮箱格式的邮箱给取出来
public void getMails_2() throws Exception { URL url = new URL("http://www.baidu.com"); URLConnection uc = url.openConnection(); //获取连接 BufferedReader bufr = new BufferedReader(new InputStreamReader(uc.getInputStream())); String mailregex = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+"; Pattern p = Pattern.compile(mailregex); String line = null; while ((line=bufr.readLine())!=null) { Matcher m = p.matcher(line); while (m.find()) //按规则,满足返回true,并指向下一位 { System.out.println(m.group()); } } }
2,切割 split(String regex)
以一定规则把字符串进行切割。返回字符数组。
例:
String[] arr = str.split(regex);
regex = " +" ; 以一个或多个空格切割
"\\."; 以 . 切割,注意:在正则中.表示任意,所以要加\\转义
"\\\\" 以 \\ 切割
以叠词切割 --> "(.)\\1" 以(.)\1 切割 因为放在字符串中,转义所以要写成(.)\\1
(.)是任意的意思\1是一组的意思
3,替换 replaceAll(String regex, String replacement)
例:
将字符串中数字连续>=5个的变成一个#
replaceAll(str,"\\d{5,}","#");
将叠词 替换成 *
replaceAll(str,"(.)\\1+","*");
注意:用()表示分组的意思,$1 表示保留这个分组
如:我我要要要学学学学 变成:我要学
replaceAll(“(.)\\1”,”$1”);
$1表示:替换成()这个组里面的。
例:将 112.46.33.3 IP地址每段补两个0 如 : 00112.0046.0033.003
replaceAll("([0-9]+)","00$1");
使其都保留成3位
replaceAll("0*([0-9]{3})","$1");
心得:还可以使用替换功能来去掉字符串中不想要的字符
如:我。。。。要学 变成:我要学
str.replaceAll(“\\.”,””);
4,获取 compile 将字符串中的符合规则的子串取出。
操作步骤:
1,将正则表达式封装成对象
Pattern p = Pattern.compile(regex);
2,让正则对象和要操作的字符串相关联
Matcher m = p.matcher(str);
3,关联后,获取正则匹配引擎
boolean b = m.find(); //将规则作用到字符串上,并进行符合规则的子串查找,有就返回true.
4,通过引擎对符合规则的子串进行操作,比如取出
m.group();
例:
找出字符串中单词长度为3的单词
String str = "ming tian jiu yao fang jia le ,da jiao-shi"; String regex = "\\b[a-z]{3}\\b"; \b是单词边界 Pattern p = Pattern.compile(regex); Matcher m = p.matcher(str); while (m.find()) //如果满足规则,就返回true,并往指向下一个子串 { System.out.println(m.group()); System.out.println("--------"+m.start()+"....."+m.end());//取出单词前后的角下标 }
如何选取所须要的方法?
1,如果只是想知道字符是否对错,用匹配。
2,想要将已有字符变成另一个字符串,用替换。
3,想要按照自定的方式将字符串变成多个子字符串,用切割。
4,想要拿到符合需求的字符串的子串,用获取。
心得:在操作字符串的时候,使用正则表达式来完成。很方便。
- java基础_14_正则表达式
- java正则表达式基础
- Java 正则表达式基础
- java基础---->正则表达式
- java正则表达式基础
- java基础--正则表达式
- Java 正则表达式基础
- java 基础正则表达式
- java正则表达式基础
- java 正则表达式基础
- 【java】正则表达式基础
- JAVA基础------正则表达式
- 【JAVA基础】正则表达式
- 【JAVA基础】正则表达式
- Java:正则表达式基础
- Java基础:正则表达式
- java基础--正则表达式
- Java基础 正则表达式
- python中的迭代器与生成器详解
- 常用PHP操作MySQL命令
- about php.ini
- nyoj_273字母小游戏
- java正则表达式
- java基础_14_正则表达式
- HLSL错误及如何执行龙书中的代码
- Binary Tree Maximum Path Sum
- hdu 2087
- Texture Mapping
- 微软 XMLHttp 使用总结
- poj 2446 (二分图匹配)
- 最简单的Oracle存储过程的编写-初次写存储过程的小白可以看看
- 集训结束