正则表达式:符合一定规律的表达式。
特点:通过一些特定符号来操作字符串
好处:专门用于操作字符串,可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差
[ abc]:a b c 中的一位字符
[^abc]:除掉abc的其他字符
[a-z]:小写字母
[a-z&&[^bc]]:小写字母除了bc
\d:数字
\D:非数字
\s:空白字符
\w:单词字符:[a-zA-Z_0-9]
^:行的开头
$:行的结尾
X?:一次或一次也没有
X*:零次或多次
X+:一次或多次
X{n,m}:X至少n次,但不超过m次
具体操作功能:
1.匹配:String matches
用规则匹配指定字符串,字符串必须全部符合规则,如果有一处不符合规则,返回false。
2.切割:String split
\有转义的效果
()代表组,组按顺序编号(从1开始) 组中的内容可以被重用 ,想要使用组的内容,可以使用\n(n是组的标号)来获取 如"(.)\\1+"
3.替换:String replace
String str1 = "erkktyqqquizzzzzosfddd";//将重叠的字符替换成单个字符 使用$
replaceAllDemo(str1,"(.)\\1+","$1");//使用$加组号
4.获取:将字符串中符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象
2.让正则表达式和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出
到底用四种功能中的哪一个呢?
1.如果只想知道该字符串是对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
邮箱验证:
String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配
String reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配
特点:通过一些特定符号来操作字符串
好处:专门用于操作字符串,可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性越差
[ abc]:a b c 中的一位字符
[^abc]:除掉abc的其他字符
[a-z]:小写字母
[a-z&&[^bc]]:小写字母除了bc
\d:数字
\D:非数字
\s:空白字符
\w:单词字符:[a-zA-Z_0-9]
^:行的开头
$:行的结尾
X?:一次或一次也没有
X*:零次或多次
X+:一次或多次
X{n,m}:X至少n次,但不超过m次
具体操作功能:
1.匹配:String matches
用规则匹配指定字符串,字符串必须全部符合规则,如果有一处不符合规则,返回false。
2.切割:String split
\有转义的效果
()代表组,组按顺序编号(从1开始) 组中的内容可以被重用 ,想要使用组的内容,可以使用\n(n是组的标号)来获取 如"(.)\\1+"
3.替换:String replace
String str1 = "erkktyqqquizzzzzosfddd";//将重叠的字符替换成单个字符 使用$
replaceAllDemo(str1,"(.)\\1+","$1");//使用$加组号
4.获取:将字符串中符合规则的子串取出
操作步骤:
1.将正则表达式封装成对象
2.让正则表达式和要操作的字符串相关联
3.关联后,获取正则匹配引擎
4.通过引擎对符合规则的子串进行操作,比如取出
String str = "ming tian jiu yao fang jia le ";
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.如果只想知道该字符串是对是错,使用匹配
2.想要将已有的字符串变成另一个字符串,替换
3.想要按照自定的方式将字符串变成多个字符串,切割。获取规则以外的子串
4.想要拿到符合需求的字符串子串,获取。获取符合规则的子串。
邮箱验证:
String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配
String reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配
ip地址排序和邮箱验证:
import java.util.regex.*;
import java.util.*;
class RegexDemo2
{
public static void main(String[] args)
{
//checkMail();
ipSort();
}
public static void checkMail()//邮箱验证
{
String mail = "abc234@sina.com";
String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配
reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配
System.out.println(mail.matches(reg));
}
public static void ipSort()//ip排序
{
String ip = "192.68.1.254 10.10.10.10 2.8.60.10 107.12.3.120";
ip = ip.replaceAll("(\\d+)","00$1");
System.out.println(ip);
ip = ip.replaceAll("0*(\\d{3})","$1");
System.out.println(ip);
String[] str = ip.split(" ");
Arrays.sort(str);
for(String s : str)
{
System.out.println(s.replaceAll("0*(\\d+)","$1"));
}
}
}
获取网页上的邮箱地址:
import java.io.*;
import java.net.*;
import java.util.regex.*;
class MailGet
{
public static void main(String[] args) throws Exception
{
//System.setOut(new PrintStream("mail.txt"));
URL url = new URL("http://zhidao.baidu.com/question/506816708.html");
URLConnection ucon = url.openConnection();
BufferedReader bufr =
new BufferedReader(new InputStreamReader(ucon.getInputStream()));
String line = null;
String mailReg = "\\w+@\\w+(\\.\\w+)+";
Pattern p = Pattern.compile(mailReg);
while((line=bufr.readLine())!=null)
{
Matcher m = p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
}
}