相关疑难解决方法(0)

使用相同的组捕获<thisPartOnly>和(thisPartOnly)

假设我们有以下输入:

<amy>
(bob)
<carol)
(dean>
Run Code Online (Sandbox Code Playgroud)

我们还有以下正则表达式:

<(\w+)>|\((\w+)\)
Run Code Online (Sandbox Code Playgroud)

现在我们得到两场比赛(如rubular.com上所示):

  • <amy>是匹配,\1捕获amy,\2失败
  • (bob)是匹配,\2捕获bob,\1失败

这个正则表达式完成了我们想要的大部分内容,它们是:

  • 它恰当地匹配打开和关闭括号(即没有混合)
  • 它捕获了我们感兴趣的部分

但是,它确实有一些缺点:

  • 重复捕获模式(即"主要"部分)
    • 这只是\w+在这种情况下,但一般来说这可能非常复杂,
      • 如果涉及反向引用,则必须为每个备用重新编号!
      • 重复使维护成为一场噩梦!(如果它改变了怎么办?)
  • 这些组基本上是重复的
    • 根据哪些备用匹配,我们必须查询不同的组
      • 它只是\1\2在这种情况下,但通常"主要"部分可以拥有自己的捕获组!
    • 这不仅不方便,而且可能存在不可行的情况(例如,当我们使用仅限于查询一个组的自定义正则表达式框架时)
  • 如果我们也想要匹配等{...},情况会迅速恶化[...].

所以问题很明显:如何在不重复"主要"模式的情况下做到这一点?

注意:在很大程度上我对java.util.regex口味感兴趣,但欢迎其他口味.


附录

这部分没有什么新内容; 它只用一个例子说明了上面提到的问题.

让我们将上面的例子带到下一步:我们现在想要匹配这些:

<amy=amy>
(bob=bob)
[carol=carol]
Run Code Online (Sandbox Code Playgroud)

但不是这些:

<amy=amy)   # non-matching bracket
<amy=bob>   # left hand side not equal to right hand side
Run Code Online (Sandbox Code Playgroud)

使用替代技术,我们有以下工作(如rubular.com上所示): …

java regex capturing-group

4
推荐指数
1
解决办法
355
查看次数

标签 统计

capturing-group ×1

java ×1

regex ×1