您的位置:首页 > 其它

正则表达式

2015-08-20 22:47 435 查看
----------android培训java培训、java学习型技术博客、期待与您交流!------------

一、正则表达式的理解

1、定义:用来操作字符串的一些规则,符合一定规则的表达式。

2、好处:对字符串的复杂操作变得更为简单。

3、特点:将对字符串操作的代码用一些符号来表示。只要使用了指定符号,就可以调用底层的代码对字符串进行操作。符号的出现,简化了代码的书写。

4、弊端:符号的出现虽然简化了书写,但是却降低了阅读性。

二、正则表达式的常见操作

1、匹配:boolean matches(String regex) 方法,(告知此字符串是否匹配给定的正则表达式)用规则匹配整个字符串,只要有一处不符合规则,就匹配结束,返回false。
/*
对手机号码进行匹配
手机号段只有 13xxx 15xxx 18xxxx,一共有11位
*/
public class RegexDemo1 {

public static void main(String[] args) {
// 自定义一个任意格式的号码进行匹配。
String tel = "13850529145";
String telReg = "1[358]\\d{9}";// 定义用于验证的正则表达式
boolean flag = tel.matches(telReg);
System.out.println(flag);
}
}

2、切割:string split(String reges)根据正则表达式的匹配拆分此字符串。
/*
对含有空格的字符串进行切割。
*/
public class RegexDemo2 {

public static void main(String[] args) {
String str = "zhang li chae fed";// 定义一个含有空格的字符串。
String reg = " +";// 按照多个空格来进行切割。
String[] arr = str.split(reg);// 切割。
System.out.println(arr.length);
for (String s : arr) {// 打印出数组中的每个元素。
System.out.println(s);
}
}
}

3、替换:String replaceAll(String reges ,String replacement)使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
/*
对字符串进行替换。
*/
public class RegexDemo3 {

public static void main(String[] args) {
String str = "erkktyqqquizzzzzo";
str.replaceAll("(.)\\1+", "$1");// 将叠词替换成$. //将重叠的字符替换成单个字母。zzzz->z
}
}

4、获取:
(1)、将将正则表达式封装成对象。
(2)、让正则对象和要操作的字符串相关联。
(3)、关联后,获取正则匹配引擎。
(4)、通过引擎对符合规则的子串进行操作,比如取出。
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexDemo {

public static void main(String[] args) {
String str = "ming tian you shi xin de yi tian";
System.out.println(str);
String reg = "\\b[a-z]{3}\\b";

// 将规则封装成对象。
Pattern p = Pattern.compile(reg);
// 让正则对象和要作用的字符串相关联。获取匹配器对象。
Matcher m = p.matcher(str);

while (m.find()) {
System.out.println(m.group());// 用于获取匹配后结果。
System.out.println(m.start() + "...." + m.end());
}
}
}

三、正则表达式例子

1、对邮件地址进行校验
public class CheckMail {

public static void main(String[] args) {
String mail = "abc12@sina.com";

String reg = "[a-zA-Z0-9_]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";// 较为精确的匹配。
reg = "\\w+@\\w+(\\.\\w+)+";// 相对不太精确的匹配。

// mail.indexOf("@")!=-1
System.out.println(mail.matches(reg));
}
}
2、将下列字符串转成:我要学编程
/*
思路方式:
1,如果只想知道该字符是否对是错,使用匹配。
2,想要将已有的字符串变成另一个字符串,替换。
3,想要按照自定的方式将字符串变成多个字符串。切割。获取规则以外的子串。
4,想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
*/
public class RegexText {

public static void main(String[] args) {
String str = "我我...我..我要..要要..要要..学学学...学学...编编...编程..程.程..程..程";
/*
将已有字符串变成另一个字符串。使用 替换功能。
1,可以先将 . 去掉。
2,在将多个重复的内容变成单个内容。
*/
str = str.replaceAll("\\.", "");
System.out.println(str);
str = str.replaceAll("(.)\\1+", "$1");
System.out.println(str);
}
}
3、将ip地址进行地址段顺序的排序。
import java.util.TreeSet;
/*
192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30
将ip地址进行地址段顺序的排序。

还按照字符串自然顺序,只要让它们每一段都是3位即可。
1,按照每一段需要的最多的0进行补齐,那么每一段就会至少保证有3位。
2,将每一段只保留3位。这样,所有的ip地址都是每一段3位。

*/
public class RegexText {

public static void main(String[] args) {
String ip = "192.68.1.254 102.49.23.013 10.10.10.10 2.2.2.2 8.109.90.30";

ip = ip.replaceAll("(\\d+)", "00$1");// 将IP地址的每一段开头添加两个0。
System.out.println(ip);

ip = ip.replaceAll("0*(\\d{3})", "$1");// 将IP地址的每一段只保留3位。
System.out.println(ip);

String[] arr = ip.split(" ");

TreeSet<String> ts = new TreeSet<String>();

for (String s : arr) {
ts.add(s);
}

for (String s : ts) {
System.out.println(s.replaceAll("0*(\\d+)", "$1"));// 将IP地址还原。
}
}
}
4、网页爬虫

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest {

public static void main(String[] args) {

}
/*
获取指定网址中的邮件地址。
使用获取功能。Pattern  Matcher
*/
public static void getMail_1()throws Exception{
URL url = new URL("http://localhost:8080/myweb/mail.html");

URLConnection conn =url.openConnection();//创建网页链接

BufferedReader bufIn = new BufferedReader(new InputStreamReader(conn.getInputStream()));

String line = null;

String mailReg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(mailReg);

while ((line = bufIn.readLine())!=null) {
Matcher m = p.matcher(line);
while (m.find()) {
System.out.println(m.group());
}
}
}
}

四、小结

增长表达式是用于字符匹配,在邮箱格式验证上有广泛的应用。要熟记匹配的规则和操作,做好心中有数。

----------android培训java培训、java学习型技术博客、期待与您交流!------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: