初学正则表达式

来源:互联网 发布:程序员未来的发展趋势 编辑:程序博客网 时间:2024/05/30 23:54

正则表达式就是以某种方式来描述字符串,例如,要找一个数字,它可能有一个负号在最前面,那么你就写一个负号加上一个问号,就像这样:-?

正则表达式是强大而灵活的文本处理工具。使用正则表达式,我们能够以编程的方式,构造复杂的文本模式,并且对输入的字符串进行搜索。下面,我们就来学学如何使用正则表达式吧。

这里注意,在Java中,对反斜线\有不同的处理。而其他语言,\\表示在正则表达式中插入一个普通的反斜线,而在Java中,\\的意思是插入一个正则表达式的反斜线,对其后面的字符具有特殊的意义。例如:要想插入一个数字,那么正则表达式就应该写为:\\d。如果只是想要插入一个普通的反斜线,就应该写成:\\\\。

public class FirstRegex {public static void main(String[] args){System.out.println("-12".matches("-?\\d+"));System.out.println("+100".matches("-?\\d+"));//(-|\\+)?\\d+代表的是起始字符可能是正号,也可能是负号,或者二则皆没有。System.out.println("+111".matches("(-|\\+)?\\d+"));}}
结果:

true
false
true

上述代码中,-?\\d+  指的是“可能有一个负号,也可能没有,后面跟着一位或多位数字”(?  表示一个或另个)(+表示一个或多个),(-|\\+)? 指的是“字符串开头可能是一个正号或者负号或者二则皆没有”。好啦,这就是我们写的第一个简单的正则表达式。

这里,还需要介绍一下,String类还自带了一个非常有用的正则表达式工具——split()方法,用于将字符串从匹配正则表达式的地方切开。

下面,写了一个将字符串从匹配正则表达式的地方进行切开。例:

import java.util.Arrays;public class Splitting {public static String split = "Hi, I am the method split";//输入正态方式public static void split(String regex){System.out.println(regex + ": "+Arrays.toString(split.split(regex)));}public static void main(String[] args){split(" ");split("\\W+");split("\\w+");split("m\\W+");split("m\\w+");}}
结果:

 : [Hi,, I, am, the, method, split]
\W+: [Hi, I, am, the, method, split]
\w+: [, , ,  ,  ,  ,  ]
m\W+: [Hi, I a, the method split]
m\w+: [Hi, I am the ,  split]

这其中的\W的意思是非单词字符,\w的意思是单词字符,m\\W+表示字母m后面跟着一个或多个非单词字符,m\\w+表示字母m后面跟着一个或多个单词字符。


——创建正则表达式

正则表达式的完整构造子列表,可以参考JDK文档java.util.regex包中的Pattern类。以下来至api中的Pattern中的介绍。


例:自定义一个正则表达式,用于判断是否符合Email格式,然后输入内容,看是否匹配正则表达式,按Esc或者esc退出。

import java.util.*;import java.util.regex.Pattern;import java.util.regex.Matcher;public class RexEmail {public static void main(String[] args){System.out.println("请输入自定义正态表达式:");Scanner in = new Scanner(System.in);String regex = in.nextLine();while(true){System.out.println("请输入:");String str = in.nextLine();if(str.equals("esc")||str.equals("Esc"))break;Pattern p = Pattern.compile(regex);Matcher m = p.matcher(str);boolean b = m.matches();if(b){System.out.println("输入正确!请继续...");}else{System.out.println("输入错误!请继续...");}}}}

结果:

请输入自定义正态表达式:
^.*[\\@].*[\\.].{1,3}$
请输入:
ss@qq.com
输入正确!请继续...
请输入:
ss@qq.comm
输入错误!请继续...
请输入:
ss@qq.
输入错误!请继续...
请输入:
ss@qq.c
输入正确!请继续...
请输入:
ss@cd
输入错误!请继续...
请输入:
esc

上面自定义的正则表达式的意思为:^ 表示字段开头,$ 表示字段结束,.*代表一个或多个字符,[\\@]和[\\.]代表输入@和点,.{1,3}代表输入的字符至少为1个,之多为3个。


未完待续...

1 0
原创粉丝点击