一、有关的正则表达式符号
预定义字符类
|
. |
任何字符(与行结束符可能匹配也可能不匹配) | |
|
\d |
数字:[0-9] | |
|
\D |
非数字: [^0-9] | |
|
\s |
空白字符:[ \t\n\x0B\f\r] | |
|
\S |
非空白字符:[^\s] | |
|
\w |
单词字符:[a-zA-Z_0-9] | |
|
\W |
非单词字符:[^\w] | |
|
System.out.println("a".matches(".")); System.out.println("1".matches("\\d")); System.out.println("%".matches("\\D")); System.out.println("\r".matches("\\s")); System.out.println("^".matches("\\S")); System.out.println("a".matches("\\w")); | ||
Greedy 数量词
|
X? |
X,一次或一次也没有 |
|
X* |
X,零次或多次 |
|
X+ |
X,一次或多次 |
|
X{n} |
X,恰好n次 |
|
X{n,} |
X,至少n次 |
|
X{n,m} |
X,至少n次,但是不超过m次 |
|
System.out.println("a".matches(".") ); System.out.println("a".matches("a") ); System.out.println("a".matches("a?") ); System.out.println("aaa".matches("a*") ); System.out.println("".matches("a+") ); System.out.println("aaaaa".matches("a{5}") ); System.out.println("aaaaaaaaa".matches("a{5,8}") ); System.out.println("aaa".matches("a{5,}") ); System.out.println("aaaaab".matches("a{5,}") ); | |
范围表示
|
[abc] |
a、b或c(简单类) |
|
[^abc] |
任何字符,除了 a、b或c(否定) |
|
[a-zA-Z] |
a 到 z或A到Z,两头的字母包括在内(范围) |
|
[a-d[m-p]] |
a 到 d或m到p:[a-dm-p](并集) |
|
[a-z&&[def]] |
d、e或f(交集) |
|
[a-z&&[^bc]] |
a 到 z,除了b和c:[ad-z](减去) |
|
[a-z&&[^m-p]] |
a 到 z,而非m到p:[a-lq-z](减去) |
|
|
|
|
System.out.println( "a".matches("[a]") ); System.out.println( "aa".matches("[a]+") ); System.out.println( "abc".matches("[abc]{3,}") ); System.out.println( "abc".matches("[abc]+") ); System.out.println( "dshfshfu1".matches("[^abc]+") ); System.out.println( "abcdsaA".matches("[a-z]{5,}") ); System.out.println( "abcdsaA12".matches("[a-zA-Z]{5,}") ); System.out.println( "abcdsaA12".matches("[a-zA-Z0-9]{5,}") ); System.out.println( "abdxyz".matches("[a-c[x-z]]+")); System.out.println( "bcbcbc".matches("[a-z&&[b-c]]{5,}")); System.out.println( "tretrt".matches("[a-z&&[^b-c]]{5,}")); | |
1、需求:获取由3个字母组成的单词。
public static void getDemo()
{
String str = "da jia zhu yi le,ming tian bu fang jia,xie xie!";
//想要获取由3个字母组成的单词。
//刚才的功能返回的都是一个结果,只有split返回的是数组,但是它是把规则作为分隔符,不会获取符合规则的内容。
//这时我们要用到一些正则对象。
String reg = "\\b[a-z]{3}\\b";
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(str);
while(m.find())
{
System.out.println(m.start()+"...."+m.end());
System.out.println("sub:"+str.substring(m.start(),m.end()));
System.out.println(m.group());
}
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.find());//将规则对字符串进行匹配查找。
// System.out.println(m.group());//在使用group方法之前,必须要先找,找到了才可以取。
}2、校验邮件
public static void checkMail()
{
String mail = "abc123@sina.com.cn";
mail = "1@1.1";
String reg = "[a-zA-Z_0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z]+)+";
reg = "\\w+@\\w+(\\.\\w+)+";//简化的规则。笼统的匹配。
boolean b = mail.matches(reg);
System.out.println(mail+":"+b);
}3、网络爬虫
class GetMailList
{
public static void main(String[] args) throws Exception
{
String reg = "\\w+@[a-zA-Z]+(\\.[a-zA-Z]+)+";
getMailsByWeb(reg);
}
public static void getMailsByWeb(String regex)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;
Pattern p = Pattern.compile(regex);
while((line=bufIn.readLine())!=null)
{
//System.out.println(line);
Matcher m = p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
bufIn.close();
}
public static void getMails(String regex)throws Exception
{
BufferedReader bufr =
new BufferedReader(new FileReader("mail.txt"));
String line = null;
Pattern p = Pattern.compile(regex);
while((line=bufr.readLine())!=null)
{
//System.out.println(line);
Matcher m = p.matcher(line);
while(m.find())
{
System.out.println(m.group());
}
}
bufr.close();
}
}
3005

被折叠的 条评论
为什么被折叠?



