简述
查询字符串时可能需要满足某些复杂规则,这时就可以使用正则表达式来定义这些复制规则。
基础语法
- 单个字符(数量:1)
- 字符:表示由一位字符所组成
- \:表示转义字符”“
- :表示一个制表符符号
- :匹配换行( )符号
- 字符集(数量:1)
- [abc]:表示可能是字符a或是字符b或是字符c中的任意一位
- [^abc]:表示不是字符a或是字符b或是字符c中的任意一位
- [a-z]:所有的小写字母
- [a-zA-Z]:字母中的任意一位
- [A-Z]:所有的大写字母
- [0-9]:表示任意一位数字(只有一位,则范围为0到9)
- 简化的字符集表达式(数量:1)
- . :表示任意的一位字符
- d:等价于"[0-9]",属于简化写法,需要转义
- D:等价于"[^0-9]"
- s:表示任意的空白字符,例如:" "," "
- S:表示任意的非空白字符
- w:等价于"[a-zA-Z_0-9]",表示由任意的字母、数字、_ 所组成
- W:等价于"[^a-zA-Z_0-9]",表示不是由任意的字母、数字、_ 所组成
- 边界匹配(不要在java使用,在javaScript使用)
- ^:正则的开始
- $:正则的结束
- 数量表达
- 正则表达式?:表示可以出现0次或1次
- 正则表达式+:表示出现1次或1次以上
- 正则表达式*:表示可以出现0次或1次或多次
- 正则表达式{n}:表示此正则正好出现n此
- 正则表达式{n,}:表示此正则出现n此以上(包含n次)
- 正则表达式{n,m}:表示次正则出现n到m次(包含n次和包含m次)
- 逻辑运算
- 正则表达式1正则表达式2:正则1判断完之后继续判断正则2
- 正则1|正则2:正则1或正则2有一组满足即可
- (正则):将多个正则作为一组,可以为这一组单独设置出现的次数
Java对正则表达式的支持
正则从JDK1.4引入的工具类,所有正则支持的类都在java.util.regex包中
java.util.regex主要有两个类:
- Pattern:此类对象如果要想取得必须使用compile()方法,功能是编译正则;
- Matcher:通过Pattern类的实例对象取得:matcher()
例子:Java中用正则表达式截取字符串中第一个出现的英文左括号之前的字符串。比如:北京市(海淀区)(朝阳区)(西城区),截取结果为:北京市。
代码:
String a = "北京市(海淀市)(朝阳区)(西城区)"; String regex = ".*?(?=\()"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(a); if(matcher.find()){ System.out.println(matcher.group()); }
String类对正则表达式的支持
String类也可以对正则的操作,String中关于正则的方法:
- public boolean matches(String regex):正则验证,使用指定的字符串判断其是否符合给出的正则表达式结构
- public String replaceAll(String regex,String replacement):根据正则表达式匹配的字符串全部替换
- public String replaceFirst(String regex, String replacement):根据正则表达式匹配的字符串替换首个
- public String[] split(String regex):根据正则表达式匹配的字符串全部拆分
- public String[] split(String regex, int limit):根据正则表达式匹配的字符串部分拆分