正则表达式 Regex
2017-09-25 12:51
253 查看
校验
需求:判断是否为移动的号码,默认是13 15 18开头的11位号码RegexDemo.java
class RegexDemo{ public static void main(String[] args) { String num="13345678901"; String regexNum="1[358]\\d{9}"; System.out.println(num.matches(regexNum)); } }
“\d”表示数字 “{}”表示个数 “[]”表示范围
匹配
找出三个字母的单词RegexDemo2.java
import java.util.regex.*; class RegexDemo2{ public static void main(String[] args) { String s="ning hao jin tian bu jia ban"; //"\b"单词边界 String reg="\\b[a-z]{3}\\b"; Pattern p=Pattern.compile(reg); Matcher m=p.matcher(s); // System.out.println(m.matches()); while(m.find()){ System.out.println(m.group()); System.out.println(m.start()+"..."+m.end()); } } }
“\b”这是一个字符,表示单词边界,前面需要”/”提示接下来的字符是需要被转义的,即第二个”/”是要被转义的。
替换
ReplaceDemo.javaclass ReplaceDemo{ public static void main(String[] args) { replace("niisjjolkkksl","(.)\\1+","$1"); replace("我我我我我要要要要要学学学学学编编编编程程程程程","(.)\\1+","$1"); } public static void replace(String str,String olds,String news){ String newstr=str.replaceAll(olds,news); System.out.println(newstr); } }
“.”表示所有单个字符 当想表示”.”的时候是用”\.”
“\1”表示第一个()部分
“$1”表示“前面使用过的”第一个()部分
分割
SplitDemo.javaclass SplitDemo{ public static void main(String[] args) { // splitString("zhangsan.lisi.wangwu","\\.");//分割普通字符或转义字符,有些字符本来就是转义字符 需要加上一个/表示之后的字符不要被转义。 // splitString("liuhua sdf final dsg"," +");//不同的空格数量 splitString("hsdffiosdnnsdoooof","(.)\\1+");//叠词分割 ()表示组 1表示第几组 } public static void splitString(String str,String reg){ String[] strs=str.split(reg); System.out.println(strs.length); for(String s:strs){ System.out.println(s); } } }
几个联系
import java.util.regex.*; import java.util.*; class RegexTest{ public static void main(String[] args) { test_3(); } //去口吃 public static void test_1(){ String str="我我...我我...我要..要要...要要....学学学....学学..编编编...编程...程.程程...程"; String regex=""; // 用两次替换 String newStr1=str.replaceAll("\\.+",""); String newStr2=newStr1.replaceAll("(.)\\1+","$1"); System.out.println(newStr1); System.out.println(newStr2); } //ip地址排序 public static void test_2(){ String str="192.68.1.254 102.19.23.13 10.10.10.10 2.2.2.2 8.109.90.30"; //补0 String str1=str.replaceAll("(\\d+)","00$1"); //去多余的0 String str2=str1.replaceAll("0*(\\d{3})","$1"); System.out.println(str2); String[] strs=str2.split(" +"); Arrays.sort(strs); for(String s:strs){ System.out.println(s.replaceAll("0*(\\d)","$1")); } } //校验邮箱 public static void test_3(){ String email="sssa2@asiainfo.com.cn"; boolean b=email.matches("[0-9a-zA-Z_]{4,12}@[0-9a-zA-Z]+(\\.[a-zA-Z]+){1,3}"); System.out.println(b); } }
利用正则表达式网络爬虫
找出一个网页中所有的邮箱import java.net.*; import java.util.regex.*; import java.io.*; class WebCrawler{ public static void main(String[] args) throws Except 4000 ion{ URL url=new URL("http://blog.csdn.net/kingszelda/article/details/41170835/"); URLConnection conn=url.openConnection(); BufferedReader br=new BufferedReader(new InputStreamReader(conn.getInputStream(),"utf-8")); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("hello.html"),"utf-8")); String reg="\\w+@\\w+\\.\\w+"; Pattern p=Pattern.compile(reg); Matcher m; String line=null; while((line=br.readLine())!=null){ m=p.matcher(line); while(m.find()){ System.out.println(m.group()); } bw.write(line); bw.newLine(); } bw.flush(); bw.close(); br.close(); } }
相关文章推荐
- 正则表达式(Regex)--(2)
- boost sp 2 regex语法规范 正则表达式
- RegexKitLite 实现正则表达式
- iOS中使用RegexKitLite来试用正则表达式
- 正则表达式(regex)及C语言实现,超强查找/匹配/替换算法
- 正则表达式话题(http://www.regexlab.com/zh/regtopic.htm)
- 引用RegexKitLite时使用正则表达式报错解决方法
- 正则表达式(Regular Expression,regex,regexp)
- iOS中使用RegexKitLite来试用正则表达式
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- win7 chrome Regex Search 插件 正则表达式搜索
- 正则表达式—RegEx(RegularExpressio)(二)
- 正则表达式(regex)或操作符”|“使用易出现功能Bug
- C++:Regex正则表达式
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- iphone中使用第三方工具(RegexKitLite)实现正则表达式
- Java regex 正则表达式
- regex.h - 正则表达式
- 正则表达式_删除字符串中的任意空格(Regex)
- 正则表达式(RegexKitLite)