您的位置:首页 > 其它

正则表达式 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.java

class 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.java

class 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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息