•捕获组
字符 |
描述 |
示例 |
(pattern) |
匹配pattern并捕获结果,自动设置组号。 |
(abc)+d 匹配abcd或者abcabcd |
(?<name>pattern)或(?'name'pattern) |
匹配pattern并捕获结果,设置name为组名。 |
|
\num |
对捕获组的反向引用。其中 num 是一个正整数。 |
(\w)(\w)\2\1匹配abba |
\k< name >或\k' name ' |
对命名捕获组的反向引用。其中 name 是捕获组名。 |
(?<group>\w)abc\k<group> 匹配xabcx |
使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的
内容)可以在表达式或其它程序中作进一步的处理。默认情况下,每个捕获组会自动
拥有一个组号,规则是:从左向右,以分组的左括号为标志,第一个出现的分组的
组号为1,第二个为2,以此类推。
例如:
(\d{4})-(\d{2}-(\d{2}))
1 1 2 3 32
以下是用程序处理捕获组的示例,对一个Url地址进行解析,并显示所有捕获组。
可以看到按顺序设置的捕获组号。
也可以自己指定子表达式的组名。这样在表达式或程序中可以直接引用组名,当
然也可以继续使用组号。但如果正则表达式中同时存在普通捕获组和命名捕获组,
那么捕获组的编号就要特别注意,编号的规则是先对普通捕获组进行编号,再对命
名捕获组进行编号。
例如:
(\d{4})-(?<date>\d{2}-(\d{2}))
1 1 3 2 23
下面在程序中处理命名捕获组,显示混合规则生成的组号,并利用捕获组的内
容对源字符串进行替换。
可以看到先对普通捕获组进行编号,再对命名捕获组编号。
•非捕获组
字符 |
描述 |
示例 |
(?:pattern) |
匹配pattern,但不捕获匹配结果。 |
industr(?:y|ies) 匹配'industry'或'industries'。 |
(?=pattern) |
零宽度正向预查,不捕获匹配结果。 |
Windows (?=95|98|NT|2000)' 匹配 "Windows2000" 中的 "Windows" 不匹配 "Windows3.1" 中的 "Windows"。
|
(?!pattern) |
零宽度负向预查,不捕获匹配结果。 |
Windows (?!95|98|NT|2000)' 匹配 "Windows3.1" 中的 "Windows" 不匹配 "Windows2000" 中的 "Windows"。
|
(?<=pattern) |
零宽度正向回查,不捕获匹配结果。 |
2000 (?<=Office|Word|Excel 匹配 " Office2000" 中的 "2000" 不匹配 "Windows2000" 中的 "2000"。
|
(?<!pattern) |
零宽度负向回查,不捕获匹配结果。 |
2000 (?<!Office|Word|Excel)' 匹配 " Windows2000" 中的 "2000" 不匹配 " Office2000" 中的 "2000"
|
非捕获组只匹配结果,但不捕获结果,也不会分配组号,当然也不能在表达式和程序中做进一步处理。
首先(?:pattern)与(pattern)不同之处只是在于不捕获结果。
接下来的四个非捕获组用于匹配pattern(或者不匹配pattern)位置之前(或之后)的内容。匹配的结果不包括pattern。
例如:
(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内的内容。如:<div>hello</div>之中的hello,匹配结果不包括前缀<div>和后缀</div>。
注释:
字符 |
描述 |
示例 |
(?#comment) |
comment是注释,不对正则表达式的处理产生任何影响 |
2[0-4]\d(?#200-249)|25[0-5](?#250-255)|1?\d\d?(?#0-199) 匹配0-255的整数 |
分享到:
相关推荐
正则表达式是处理字符串的强大工具,尤其...综上所述,正则表达式中的捕获组和非捕获组为我们提供了强大的模式匹配和文本处理能力。通过对它们的理解和应用,可以极大地提高我们在处理字符串相关任务时的效率和准确性。
与捕获组和非捕获组不同,预查不会消耗字符,也就是说,它们是零宽度的断言。 在PHP的正则表达式中,预查和预查可以使用"?"来简化书写,它们不会影响匹配过程中的字符计数,仅仅是对匹配条件进行额外的判断。例如,...
在实际应用中,捕获组和非捕获组的使用可以帮助我们精确地匹配复杂模式,提高数据处理的灵活性。通过合理运用这些技术,我们可以处理各种字符串匹配和提取的场景,使得数据处理工作变得高效而准确。
命名捕获组和非捕获组为正则表达式的书写和理解提供了便利,而反向引用则增强了字符串替换时的灵活性和表达能力。掌握这些知识能帮助开发者更加高效地处理字符串,编写出更加清晰和健壮的代码。
感觉JDK这块不好理解,写了几个例子。求拍求回复。
例如,创建一个正则表达式,包含捕获组和非捕获组,使用贪婪或非贪婪匹配,以及应用或关系和零宽度断言进行文本匹配和提取。通过实例化`Pattern`对象,调用`matcher(String input)`方法,然后使用`matches()`, `find...
JavaScript 1.2的`lastParen`特性虽然在现代JavaScript版本中已经被更强大的特性所替代,如命名捕获组和非捕获组等,但对于了解JavaScript的历史和演进过程,以及在处理早期版本的代码时,理解`lastParen`仍然是非常...
4. **非捕获组**:有时我们希望分组但并不需要保存匹配的结果,这时可以使用非捕获组 `(?:...)`。这种情况下,分组仅用于逻辑运算,不会被当作捕获组对待。 5. **反向引用**:在某些正则表达式引擎中,可以使用反向...
qt的键盘事件不能捕获多个按键按下.即便是在使用modifiers()时,也只能获得类似于shfit+x,ctrl+c,alt+y等等之类的快捷键,对于shift+x+c诸如此类更多的组合就无能为力的.本案例中提供了一种捕获shift+a+b...组合键的...
ORO库支持Perl风格的正则表达式,包括后向引用、捕获组和非捕获组等功能。 4. **使用Jakarta ORO**:在Java中使用Jakarta ORO,首先需要导入相关依赖,然后可以创建`OroPattern`对象来编译正则表达式,接着使用`...
四、捕获组和非捕获组 1. 捕获组:使用圆括号`()`定义,可以捕获子匹配。例如`(\d+)\s+(\w+)`会捕获两组数字和单词。 2. 非捕获组:使用`(?:)`定义,不创建捕获组,仅用于分组。例如`(\d+)(?:\s+(\w+))`将数字和单词...
7. **捕获组和非捕获组**:通过括号定义捕获组,可以单独引用和处理匹配的部分,`(?:)`定义非捕获组,不保存匹配结果。 8. **反向引用**:在替换字符串中,可以通过`\1`, `\2`等引用捕获组的内容。 9. **正向前瞻...
6. **捕获组和非捕获组**:RegexPal允许用户创建捕获组(())以提取匹配的子串,以及非捕获组((?:))来组织模式而不会影响捕获。 7. **回溯控制**:通过使用反向引用(\n)和零宽断言(如^、$、\b、\B、(?=...)、...
4. **捕获组和非捕获组** - **捕获组**:用括号`()`定义的子表达式,可以捕获匹配的子串,如`(abc)`。 - **非捕获组**:使用`(?:...)`来定义的子表达式,不捕获匹配的子串,仅用于模式匹配。 5. **预定义字符类**...
3. **捕获组和非捕获组** 在正则表达式中,圆括号用于创建捕获组,捕获组能够保留匹配的部分,方便后续引用。例如,`(http|https)`就是一个捕获组,可以捕获'http'或'https'。而如果我们只想匹配这部分但并不保存,...
5. **捕获组和非捕获组**: - `(pattern)`创建一个捕获组,允许你引用匹配到的内容。 - `(?:pattern)`创建一个非捕获组,不保存匹配结果,仅用于组合其他模式。 6. **正向预查和反向预查**: - `(?=pattern)`...