栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java 7中名为捕获组的正则表达式支持

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 7中名为捕获组的正则表达式支持

指定命名的捕获组

将以下正则表达式与一个捕获组作为示例

([Pp]attern)

以下是有关如何为上述正则表达式指定命名捕获组的
4个示例:

(?<Name>[Pp]attern)(?<group1>[Pp]attern)(?<name>[Pp]attern)(?<NAME>[Pp]attern)

请注意,捕获组的名称必须严格匹配以下模式:

[A-Za-z][A-Za-z0-9]*

组名区分大小写,因此在引用它们时必须指定确切的组名(请参阅下文)。

在正则表达式中反向引用命名的捕获组

要在正则表达式中反向引用与命名捕获组匹配的内容(对应于上面的4个示例):

k<Name>k<group1>k<name>k<NAME>

命名的捕获组仍被编号,因此在所有四个示例中,可以

1
按常规使用反向引用。

请参考替换字符串中的命名捕获组

要在替换字符串中引用捕获组(对应于上面的4个示例):

${Name}${group1}${name}${NAME}

与上述相同,在所有四个示例中,可以

$1
在替换字符串中引用捕获组的内容。

以COMMENT模式命名的捕获组

使用

(?<name>[Pp]attern)
作为该部分的示例。

Oracle对

COMMENT
模式的实现(嵌入标记
(?x)
)将以下示例解析为与上述正则表达式相同:

(?x)  (  ?<name>  [Pp] attern  )(?x)  (  ?<  name  >         [Pp] attern  )(?x)  (  ?<  n  a m    e  >  [Pp] attern  )

除非

?<
必须 其分隔,否则即使在捕获组的名称之间也可以有任意间距。

不同的捕获组名称相同吗?

虽然在.NET,Perl和PCRE中可以为不同的捕获组定义相同的名称,但Java(Java 8)当前 不支持
该名称。不同的捕获组不能使用相同的名称。

命名与捕获组相关的API

Matcher类中的新方法支持按组名检索捕获的文本:

  • group(String name)
    (来自Java 7)
  • start(String name)
    (来自 Java 8
  • end(String name)
    (来自 Java 8

MatchResult
Java
8开始,类中缺少相应的方法。针对此问题,存在正在进行的增强请求JDK-8065554。

当前尚无API可以获取正则表达式中命名捕获组的列表。我们必须跳过额外的障碍才能做到。尽管对于编写大多数正则表达式来说是没有用的,但除了编写正则表达式测试器之外。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470175.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号