我在学习编程与实际编程的过程中,总是为正则这个编程中的概念感叹不已.假设,没有正则这个概念工具,就是验证一个简单的手机号码.我们也得把客户输入的字符,一个个提取出来进行程序规则的验证。这增加了程序员的时间支出,如果再要匹配更复杂的模式,比如在英汉字典中找出最长的单词,工作量又大了好几倍.每感于此,我就觉得正则是一个十分强大的概念,自己特别想体会其中的妙用,但限于自己的编程生涯与认知层次,还未体验到其更高阶的乐趣.但是每次往前走一点,发现妙用或者有新的新的体会,做下记录与归纳,推演.相信一定会越来越懂它.希望与此文有一面之缘的人,可以留下有趣,或者有用的问题,激发大家使用正则来解决它. 我们写的程序本质上就是字符,而能有效的处理这些字符的工具将会促进我们的编程,而正则就是其中一个.
正则,最常见的是验证各种输入是否符合要求,比如邮件,手机号码,密码复杂度.这些网上一大把,实在已经被看腻了.
我记得大学时,学习线性代数接触过正则这个概念,无奈课本不在身边,无法复盘这个概念在数学中的作用,亦无法与计算机中的正则做比较,put it to toDoList.
正则的主要功用就是 查找/替换.现将总结示例如下
1.在字典中查询最长的单词
2.将10/31/05转化为2015年10月31日
public static void main(String[] args) {
String filePath = "E:\\《牛津高阶英汉词典》全集完整版TXT电子书\\牛津电子词典.txt";
// 输出文件中匹配正则的字符
String regualr="\\b\\w{15,}\\b";
Pattern pattern = Pattern.compile(regualr);
//printRegularText(pattern,filePath);
// 正则反义使用
regualr = "(\\d{2})/(\\d{2})/(\\d{2})";
// 输入美国日期格式 将此替换为中国日期格式
//repalceStrByregualr(regualr);
}
// 输出文件中匹配正则的字符
private static void printRegularText(Pattern pattern,String filePath) {
Scanner scanner = null;
try {
scanner = new Scanner(new File(filePath));
while(scanner.hasNext()){
String tempString = scanner.nextLine();
Matcher m = pattern.matcher(tempString);
while(m.find()){
System.out.println(m.group());
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally{
if(scanner!=null){
scanner.close();
}
}
}
// 美国日期格式替换为中国日期格式
private static void repalceStrByregualr(String regualr){
Scanner scanner = null;
try{
scanner = new Scanner(System.in);
while(scanner.hasNext()){
String tempLine = scanner.nextLine();
System.out.println(tempLine.replaceAll(regualr,"20$3-$1-$2"));
}
} catch (Exception e) {
// TODO: handle exception
} finally{
if(scanner!=null){
scanner.close();
}
}
}
促使本人写此文章的冲动,有一部分是因为看了伯乐在线的一篇博客55分钟学会正则表达式