正则表达式
正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串。其实就是一种规则。有自己特殊的应用。
[^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]
X? X,一次或一次也没有
X* X,零次或多次
X+ X,一次或多次
X{n} X,恰好 n 次
X{n,} X,至少 n 次
X{n,m} X,至少 n 次,但是不超过 m 次
匹配
String.matches() 验证一个字符串是否匹配指定的正则表达式
分割
String.split() 用指定正则表达式能匹配的字符作为分隔符, 分割字符串
替换
String.replaceAll() 把字符串中能匹配正则表达式的部分替换为另一个字符串
查找
Pattern.compile() 创建正则表达式对象
Pattern.matcher() 用正则表达式匹配一个字符串, 得到匹配器
Matcher.find() 查找字符串中是否包含能匹配正则表达式的部分
Matcher.group() 获取匹配的部分
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Set;
import java.util.TreeSet;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test2 {
/**
* 在一个文本文档读取电话号码,将所有的电话号码自然排序存储在phone.txt这个文档上
* @throws IOException
*/
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("xxx.txt");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int len;
byte[] arr = new byte[1024];
while((len = fis.read(arr))!= -1) {
baos.write(arr, 0, len);
}
String message = new String(baos.toByteArray()); //将内存中的所有字节数据转换成字符串
message = message.replace("\r\n", ""); //去掉换行符号
Set<String> set = new TreeSet<>(); //将获取到的电话号码存储在集合中,自然排序
String regex = "1[3458]\\d{9}"; //电话号码的正则表达式
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(message);
while(m.find())
set.add(m.group()); //将找到的电话号码存储在集合中
FileWriter fw = new FileWriter("Phone.txt");
for (String string : set) {
fw.write(string + "\r\n");
}
fis.close();
fw.close();
}
总结:
正则表达式是一种字符串的约束格式, 例如在某些网站上填写邮箱的时候, 如果乱写会提示输入不合法, 这种验证就是使用正则表达式做的.

浙公网安备 33010602011771号