正则表达式基础
来源:互联网 发布:上海数据交易中心官网 编辑:程序博客网 时间:2024/06/16 03:23
正则表达式其实算是单独的技术,在各个语言中细微的区别,但本质上是一致的,都是用来描述和匹配符合某个规则的语法的字符串呗。当要验证符合某些规则,例如邮件地址什么的,使用起来就很方便。
在java中,反斜线字符 ('\') 用于引用转义构造,如jdk api表中定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配。
而在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。
根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与 单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使 用字符串字面值 "\\(hello\\)"。
以上规则在java api java.util.regex.Pattern下可以找到,总结起来就是\直接在字符串中使用的情况仅限于valid ones are \b \t \n \f \r \" \' \\这些预定义的值,以及将来可能新增的转移值,而其它所有字符串字面值一旦包含\\必须成对出现,否则会出现编译错误。(鼠标移到错误上可看到:valid ones are \b \t \n \f \r \" \' \\)。
1.最普遍而常用的方式,即验证一个String是否满足给定规则。
public static void main(String[] args) {// 1.最普遍而常用的方式,即验证一个String是否满足给定规则Pattern modelPattern = Pattern.compile("^1[34578]{1}\\d{9}");Matcher matcher = modelPattern.matcher("13282149093");//等同于下面这个式子,在pattern值使用一次的时候很方便Pattern.matches("^1[34578]{1}\\d{9}", "13282149093");String str = "13282149093";str.matches("^1[34578]{1}\\d{9}"); // 本质上是如上代码。此外split() replace()也是调用matcher类的方法System.out.println(matcher.matches());}String类的match方法的本质
public static boolean matches(String regex, CharSequence input) { Pattern p = Pattern.compile(regex); Matcher m = p.matcher(input); return m.matches(); }2.捕获组的使用,如(A(B(C)))实际上是3个捕获组,即(A(B(C))),(B(C)),(C),可以得到每个组的信息
public static void regular() {// 捕获组:捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建String line = "This order was placed for QT3000! OK?";//找到连续数字patternString pattern = "(\\D*)(\\d+)(.*)";Pattern r = Pattern.compile(pattern);Matcher m = r.matcher(line);if (m.find()) { System.out.println("Found value: " + m.group(0));//This order was placed for QT3000! OK? System.out.println("Found value: " + m.group(1));//This order was placed for QT System.out.println("Found value: " + m.group(2));//3000 System.out.println("Found value: " + m.group(3));//! OK?} else { System.out.println("NO MATCH");} }以上例子即要找到连续数字部分,将整个String分为了3个捕获组(group(0)默认为整个字符串)。
- 正则表达式基础表达式
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式的基础
- 正则表达式基础
- 正则表达式基础
- 正则表达式入门基础
- 正则表达式基础
- Javascript正则表达式基础
- 正则表达式基础
- 正则(正规)表达式基础
- 一个VPN帐号几个人同时登录的方法
- LeetCode算法题目:Subsets AND Subsets II
- 数据查询
- WPF中,一个由Line控件的StrokeDashArray属性引发的CPU占用率问题
- HDU 2049 神、上帝以及老天爷 错排
- 正则表达式基础
- 深入理解 Android 卷I
- HDU 1010 Tempter of the Bone
- chmod文件权限设置总结
- MySQL数据库(21)
- 数据库设计
- [C++]linux下错误的捕获:errno和strerror的使用
- IDEA 2017 IDEA license server 激活
- Android Build Variants 为项目设置变种版本