java 正则表达式获取匹配和非获取匹配

 1 package test1;
 2
 3 import java.util.regex.Matcher;
 4 import java.util.regex.Pattern;
 5
 6 public class TestExp {
 7     /**
 8      *
 9      * 在使用正则表达式的时候,我们经常会使用()把某个部分括起来,称为一个子模式。 子模式有Capturing和Non-Capturing两种情况。
10      * Capturing指获取匹配 :
11      * 是指系统会在幕后将所有的子模式匹配结果保存起来,供我们查找或者替换。如后向引用(在表达式的后面应用前面匹配的子字符串)的使用;
12      * Non-Capturing指非获取匹配 :
13      * 这时系统并不会保存子模式的匹配结果,子模式的匹配更多的只是作为一种限制条件使用,如正向预查,反向预查,负正向预查,负反向预查等。
14      *
15      * 在Java中可以使用非获取匹配作为筛选子字符串的条件。例如 想获得“hello world !”中的“hello world ”
16      * ,注意,不要感叹号。 就可以再匹配感叹号时使用非获取的正则表达式。("hello world (?=!)")
17      *
18      * Java中后向引用的使用:
19      * "abc def".replaceFirst("(\\w+)\\s+(\\w+)", "$2 $1"); //结果为def abc
20      * "abc def aaa bbb".replaceAll("(\\w+)\\s+(\\w+)", "$2 $1"); //结果是 def abc bbb aaa
21      *
22      * 使用$x替换字符中子字符串。
23      *
24      * */
25     public static void main(String[] args) {
26         /** groupcount 的下标是从0开始的,也就是说如果获取一个匹配项,那么该值为0 */
27         /** 正向肯定预查 */
28         /**
29          * 目的: 查找元字符中符合“win ”格式的子字符串,而且该字符串后面紧跟一个“7”字符串。
30          *
31          * */
32         /*
33          * Pattern ptn = Pattern.compile("win (?=7)",Pattern.UNICODE_CASE) ;
34          * Matcher m = ptn.matcher("win 7") ; System.out.println("groupcount: "
35          * + m.groupCount()); while(m.find()){ System.out.println(m.group()); }
36          */
37         /** 正向否定预查 */
38         /**
39          * 目的: 查找元字符中符合“win ”格式的子字符串,而且该字符串后面没有跟一个“7”字符串。
40          *
41          * */
42         /*
43          * Pattern ptn = Pattern.compile("win (?!7)",Pattern.UNICODE_CASE) ;
44          * Matcher m = ptn.matcher("win 8") ; while(m.find()){
45          * System.out.println(m.group()); }
46          */
47         /** 反向肯定预查 */
48         /**
49          * 目的:查找元字符串中符合“win”的子字符串,而且在该字符串前面还跟着“7”字符串。 获取的是win,因为7是非获取的。
50          *
51          * */
52         /*
53          * Pattern ptn = Pattern.compile("(?<=7)win",Pattern.UNICODE_CASE) ;
54          * Matcher m = ptn.matcher("7win") ; while(m.find()){
55          * System.out.println(m.group()); }
56          */
57         /** 反向否定预查 */
58         /**
59          * 目的:查找元字符串中符合“win”的子字符串,而且在该字符串前面不跟“7”字符串。
60          *
61          */
62         /*
63          * Pattern ptn = Pattern.compile("(?<!7)win",Pattern.UNICODE_CASE) ;
64          * Matcher m = ptn.matcher("8win") ; while(m.find()){
65          * System.out.println(m.group()); }
66          */
67     }
68 }
时间: 2024-08-03 05:25:01

java 正则表达式获取匹配和非获取匹配的相关文章

Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配

Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>';   reg.RegEx  := '<.*>';

[ 转载 ] 什么是正则表达式的贪婪与非贪婪匹配

http://www.cnblogs.com/xudong-bupt/p/3586889.html 1.什么是正则表达式的贪婪与非贪婪匹配 如:String str="abcaxc"; Patter p="ab*c"; 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配.如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c). 非贪婪匹配:就是匹配到结果就好,就少的匹配字符.如上面使用模式p匹配字符串str,结果就是匹配到:abc(

正则表达式话题 【正则表达式--递归匹配与非贪婪匹配 】

[出处:http://www.regexlab.com/zh/regtopic.htm] 引言 本文将逐步讨论一些正则表达式的使用话题.本文为本站基础篇之后的扩展,在阅读本文之前,建议先阅读正则表达式参考文档一文. 1. 表达式的递归匹配 有时候,我们需要用正则表达式来分析一个计算式中的括号配对情况.比如,使用表达式 "\( [^)]* \)" 或者 "\( .*? \)" 可以匹配一对小括号.但是如果括号 内还嵌有一层括号的话 ,如 "( ( ) )&q

简单聊一聊正则表达式中的贪婪匹配和非贪婪匹配

1. 贪婪匹配 在JS中利用正则表达式时,默认的匹配就是贪婪匹配,也就是尽可能多的去匹配,举个例子: var s = 'aaa'; var regexp = /a+/; // 匹配1个或多个a,贪婪匹配 console.log(regexp.exec(s)[0]); // 'aaa' 在上面的例子中,匹配到了 'aaa' . 2. 非贪婪匹配 我们同样可以进行非贪婪匹配只需要在正则表达式待匹配的字符后面加上一个 ? 即可. 还是上面的例子: var s = 'aaa'; var regexp =

Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配《转》

//贪婪匹配 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>'; reg.RegEx := '<.*>'; //将会全部匹配, 因为两头分别是: < 和 > reg.Rep

shell 中 贪婪匹配 和 非贪婪匹配

举个栗子: v=jfedu.shiyiwen.com echo ${v%.*} 一个%为非贪婪匹配,即匹配最短结果.%从右到左进行非贪婪匹配,匹配什么呢? 匹配已 .*的字符. 那么当然是匹配到了.com 然后执行删除匹配到的字符.结果就是(这里的 "." 相当于定界符.而“*”是通配符) jfedu.shiyiwen echo ${v%%.*} 而这里执行贪婪匹配,即匹配最长结果就匹配到了 .shiyiwen.com 结果为 jfedu 这里在说一个 # 刚好和 %顺序相反而已,#是

PHP正则 贪婪匹配与非贪婪匹配

$str = ".abcdeabcde"; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0] => abcdeabcde ) -------------------------- 贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配,默认情况下是贪婪模式; preg_match('/a.+?e/', $str, $match); print_r($match); Array ( [0]

贪婪匹配和非贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配 string pattern1 = @"a.*c";   // greedy match Regex regex = new Regex(pattern1); regex.Match("abcabc"); // return "abcabc" 非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配 string pattern1 = @"a.*?c&

Python 正则表达式 贪心匹配和非贪心匹配

Python的正则表达式默认是"贪心匹配",即在有第二义的情况下,尽可能匹配最长的字符串,在正则表达式的花括号后面跟上问号,可以变为非贪心模式 >>> >>> haRegex=re.compile(r'(ha){3,5}')>>> m=haRegex.search('hahahahahaha')>>> print(m.group())hahahahaha>>> 上述输出5个ha,是贪心匹配 >