您的位置:首页 > 职场人生

黑马程序员_正则表达式

2013-11-01 20:45 155 查看
----------------------
ASP.Net+Android+IOS开发.Net培训、期待与您交流!
----------------------
1.正则表达式:符合一定规律的表达式。

作用:用于专门操作字符

特点:通过一些特定符号来操作字符串

好处:专门用于操作字符串,可以简化对字符串的复杂操作。

弊端:符号定义越多,正则越长,阅读性越差

字符
x字符 x
\\反斜线字符
\0n带有八进制值 0 的字符 n (0 <= n <= 7)
\0nn带有八进制值 0 的字符 nn (0 <= n <= 7)
\0mnn带有八进制值 0 的字符 mnn(0 <= m <= 3、0 <= n <= 7)
\xhh带有十六进制值 0x 的字符 hh
\uhhhh带有十六进制值 0x 的字符 hhhh
\t制表符 ('\u0009')
\n新行(换行)符 ('\u000A')
\r回车符 ('\u000D')
\f换页符 ('\u000C')
\a报警 (bell) 符 ('\u0007')
\e转义符 ('\u001B')
\cx对应于 x 的控制符
字符类
[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](减去)
预定义字符类
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]
Greedy 数量词

X?X,一次或一次也没有

X*X,零次或多次X+X,一次或多次

X{n}X,恰好 n 次

X{n,}X,至少 n 次

X{n,m}X,至少 n 次,但是不超过 m 次

2.具体操作功能:

(1)匹配:String matches

用规则匹配指定字符串,字符串必须全部符合规则,如果有一处不符合规则,返回false。

(2)切割:String split

\有转义的效果

()代表组,组按顺序编号(从1开始) 组中的内容可以被重用 ,想要使用组的内容,可以使用\n(n是组的标号)来获取 如"(.)\\1+"

(3)替换:String replace

String str1 = "erkktyqqquizzzzzosfddd";//将重叠的字符替换成单个字符 使用$

replaceAllDemo(str1,"(.)\\1+","$1");//使用$加组号

(4)获取:将字符串中符合规则的子串取出

3.操作步骤:

(1)将正则表达式封装成对象。

(2)让正则对象和要操作的字符串相关联。

(3)关联后,获取正则匹配引擎。

(4)通过引擎对符合规则的子串进行操作,比如取出。

4.邮箱验证:

String reg = "\\w{6,12}@\\w+(\\.[a-zA-Z]+)+";//精确匹配

String reg = "\\w+@\\w+(\\.\\w+)+";//相对笼统的匹配

5.IP地址排序:

/*
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 static void ipSort()
{
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");
System.out.println(ip);

ip = ip.replaceAll("0*(\\d{3})","$1");
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"));
}
}

}


6.获取网页上的邮箱地址(网页爬虫):

import java.io.*;
import java.util.regex.*;
import java.net.*;
import java.util.*;
class RegexTest2
{
public static void main(String[] args) throws Exception
{
getMails_1();
}

public static void getMails_1()throws Exception
{
URL url = new URL("http://192.168.1.254: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());
}
}
}

/*
获取指定文档中的邮件地址。
使用获取功能。Pattern  Matcher
*/
public static void getMails()throws Exception
{
BufferedReader bufr =
new BufferedReader(new FileReader("mail.txt"));

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


----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: