场景
想匹配一个数字形式的IP地址,地址后可能有端口号,也可能没有。在做这个小功能的时候发现Java 的正则表达式匹配(Group Capture)功能有抓取和不抓取(Capturing vs Non-Capturing)两种选择,如果想选择不抓取一个组,只需要让匹配组的正则表达式以(?:起头。
例子
例1
- public static void main(String args[]) {
- final String regStr = "http://(\\d+.\\d+.\\d+.\\d+(:8080)?)";
- String data = "http://80.80.9.3:8080"
- Matcher m = Pattern.compile(regStr).matcher(data);
- boolean found = m.find();
- System.out.println(found);
- System.out.println(m.group(1));
- System.out.println(m.group(2));
- }
输出
- public static void main(String args[]) {
- final String regStr = "http://(\\d+.\\d+.\\d+.\\d+(?::8080)?)";
- String data = "http://80.80.9.3:8080"
- Matcher m = Pattern.compile(regStr).matcher(data);
- boolean found = m.find();
- System.out.println(found);
- System.out.println(m.group(1));
- System.out.println(m.group(2));
- }