Java Regex
来源:互联网 发布:肯尼迪遇刺真相知乎 编辑:程序博客网 时间:2024/04/28 09:07
Special constructs (named-capturing and non-capturing)(?<name>X) X, as a named-capturing group(?:X) X, as a non-capturing group(?idmsuxU-idmsuxU) Nothing, but turns match flags i d m s u x U on - off(?idmsux-idmsux:X) X, as a non-capturing group with the given flags i d m s u x on - off(?=X) X, via zero-width positive lookahead(?!X) X, via zero-width negative lookahead(?<=X) X, via zero-width positive lookbehind(?<!X) X, via zero-width negative lookbehind(?>X) X, as an independent, non-capturing group
特殊构造(命名捕获组 和 非捕获组)(?<name>X) X, 作为一个命名捕获组, 匹配到正则X的组可以根据组名name取到。 eg: matcher.group(String name); 可使用该方法获取本命名捕获组, 形参name即为命名捕获组的名称。(?:X) X, 作为一个非捕获组, 与捕获组的区别在于不捕获匹配的文本,仅仅作为分组进行正则X匹配,在匹配完成后在内存中不保留匹配到的字符。 eg: matcher.group(int num); 将忽略本非捕获组的值。(?idmsuxU-idmsuxU) Nothing, 但是开启匹配标志i d m s u x U,可以使用'-'关闭匹配标志。(?idmsux-idmsux:X) X, 作为一个非捕获组, 可以指定开启匹配标志i d m s u x U,可以使用'-'关闭匹配标志。(?=X) X, 通过零宽度的正先行断言,也有叫前瞻匹配;标志从当前位置开始,将对之后字符匹配满足正则X进行断言。(?!X) X, 通过零宽度的负先行断言,与(?=X)相反;标志从当前位置开始,将对之后字符匹配不满足正则X进行断言。(?<=X) X, 与(?=X)查找方向相反,通过零宽度的正后行断言,也有叫后顾匹配;标志从当前位置开始,将对之前字符匹配满足正则X进行断言。(?<!X) X, 与(?!X)查找方向相反,通过零宽度的负后行断言,与(?<=X)相反;标志从当前位置开始,将对之前字符匹配不满足正则X进行断言。(?>X) X, 作为独立的非捕获组;标志从当前位置开始,将对之后字符匹配正则X,其消耗字符。 注意: 预匹配不消耗字符, 而(?>X)消耗字符。
Demo:
import java.util.regex.Matcher;import java.util.regex.Pattern;public class RegexCapturingDemo { // 获取时间 private static void namedCapturing(String logStr) { Pattern p = Pattern.compile("(?<time>\\d+:\\d+:\\d+).*"); Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group("time") + " s\n"); } // 获取毫秒值 private static void nonCapturing(String logStr) { Pattern p = Pattern.compile("(?:\\d+:\\d+:\\d+).(\\d+).*"); Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + " ms\n"); } // 匹配error警告日志,获取错误类信息 private static void idmsuxUCapturing(String logStr) { Pattern p = Pattern.compile("(?:\\d+:\\d+:\\d+).*(?i:error) (.*Controller).*"); Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + " class\n"); } // 将匹配c.a.w.c.包下的含Controller后缀的类名 private static void lookaheadCapturing(String logStr) { Pattern p = Pattern.compile("(?:\\d+:\\d+:\\d+).*(?i:error) (?=c.a.w.c.).*\\.(?<controller>.*Controller).*");// 预匹配包,不满足则不再正则匹配 Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + " class\n"); } // 输出匹配到的TradeController的全类名 private static void lookbehindCapturing(String logStr) { Pattern p = Pattern.compile("(?:\\d+:\\d+:\\d+).*(?i:error) (.*controller.*)(?<=TradeController) - .*"); Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + "\n"); } // 从左往右依次匹配 private static void independentCapturing(String logStr) { Pattern p = Pattern.compile("(?>in|insert|inspect)(.*)"); Matcher m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + "\n"); p = Pattern.compile("(?>insert|inspect|in)(.*)"); m = p.matcher(logStr); m.matches(); System.out.println(m.group(1) + "\n"); } public static void main(String[] args) { String logStr = "04:12:45.432 [http-nio2-8080-exec-3] ERROR c.a.w.c.controller.TradeController - {" + "\"message\":\"Invalid request parameters or post body.\"}"; namedCapturing(logStr); nonCapturing(logStr); idmsuxUCapturing(logStr); lookaheadCapturing(logStr); lookbehindCapturing(logStr); independentCapturing("inspector insert"); }}
参考链接: java7 Pattern & regular-expressions & regexbuddy & 使用正则表达式找出不包含特定字符串的条目
0 0
- java regex
- Java regex
- Java Regex
- Java regex
- Java Regex
- java.util.regex.Pattern
- java.util.regex.Pattern
- java.util.regex.Pattern
- java.util.regex.Pattern
- Java regex正则表达式
- JAVA Regex Expression
- Java regex 正则表达式
- java regex document
- java正则表达式(regex)
- java.util.regex.PatternSyntaxException
- java.util.regex.PatternSyntaxException
- java regex group 用法
- java.util.regex
- [Presto]什么是Presto
- OC运行时版本和平台
- SSH—Struts2拦截器的应用(防止未登录用户进行操作)
- Samba配置文件常用参数详解
- C#学习之继承
- Java Regex
- Java之装饰模式(Decorator Pattern)
- 第五周项目5-后缀表达式
- DOM对HTML元素的访问操作1
- Android开发:最全面、最易懂的Android屏幕适配解决方案
- [Leetcode]Palindrome Number
- HDU 5902 GCD is Funny(GCD)
- jquery+ajax+struts实现异步刷新
- 企业工商,诉讼及备案信息查询