标签: named-captures

Perl的`(?PARNO)`在完成时会丢弃它自己的命名捕获吗?

递归正则表达式是否理解命名捕获?在文档中有一个注释(?{{ code }}),它是一个独立的子模式,它有自己的一组捕获,在子模式完成时被丢弃,并且有一个注释(?PARNO),它的"类似于(?{{ code }}).(?PARNO)在它完成时丢弃它自己的命名捕获?

我正在写关于Perl的Mastering Perl的递归正则表达式.perlre已经有一个平衡parens的例子(我在Perl正则表达式匹配平衡括号中显示它),所以我想我会尝试平衡引号:

#!/usr/bin/perl
# quotes-nested.pl

use v5.10;

$_ =<<'HERE';
He said 'Amelia said "I am a camel"'
HERE

say "Matched!" if m/
    (
        ['"]
            ( 
                (?: 
                    [^'"]+
                    | 
                    ( (?1) ) 
                )* 
            )
        ['"]
    )
    /xg;

print "
1 => $1
2 => $2
3 => $3
4 => $4
5 => $5
";
Run Code Online (Sandbox Code Playgroud)

这有效,两个引号显示在$1$3: …

regex perl named-captures

32
推荐指数
1
解决办法
773
查看次数

regexp\k <name + 0>中的"+0"是什么意思?

我是Ruby中的正则表达式的新手,我似乎无法找到任何有关其\k<name+0>含义的可靠文档.这+0是我没有得到的部分.

这是一个例子 - 这个Regexp匹配回文:

\A(?<p>(?:(?<l>\w)\g<p>\k<l+0>|\w))\z
Run Code Online (Sandbox Code Playgroud)

当我删除了+0\k<l+0>它不再正确地匹配.
我的测试:

>> /\A(?<p>(?:(?<l>\w)\g<p>\k<l+0>|\w))\z/.match "aabbcdcbbaa" 
#=> #<MatchData "aabbcdcbbaa" p:"aabbcdcbbaa" l:"c">

>> /\A(?<p>(?:(?<l>\w)\g<p>\k<l>|\w))\z/.match "aabbcdcbbaa" 
#=> nil
Run Code Online (Sandbox Code Playgroud)

我所做的就是删除+0.我还没有找到任何文件或这方面的例子,有人能指出我正确的方向吗?

ruby regex backreference named-captures

10
推荐指数
1
解决办法
176
查看次数

如何解构命名捕获组?

在 JavaScript 中,使用命名捕获组非常方便

const auth = 'Bearer AUTHORIZATION_TOKEN'
const { groups: { token } } = /Bearer (?<token>[^ $]*)/.exec(auth)
console.log(token) // "AUTHORIZATION_TOKEN"
Run Code Online (Sandbox Code Playgroud)

当我在打字稿中尝试时,它无法编译,因为groups可能是null. 如果我放一个!after exec(...),它只会踢罐头:token可能是未定义的。

在打字稿中,有什么方法可以像上面那样解构正则表达式吗?

regex destructuring typescript named-captures

7
推荐指数
1
解决办法
885
查看次数

多个名为regex java的组?

是否有任何正则表达式api或java可以在一个模式中接受多个具有相同名称的组?

java regex named-captures

5
推荐指数
1
解决办法
1853
查看次数

如何强制正则表达式匹配模式中最长的部分。

我在 .net 中有一个模式,我希望一个字符串与该模式的最长可能部分匹配

Pattern : "I (?<a>[\w\W]*)(want to match (?<b>longest))? available"
or "I ((?<a>[\w\W]*)|(want to match (?<b>longest))?)+ available"
Run Code Online (Sandbox Code Playgroud)

字符串:“我想匹配最长的可用时间”

匹配后我们有:a="想要匹配最长的" , b=""
但我想要:a="" , b="longest"

.net regex named-captures

3
推荐指数
1
解决办法
1万
查看次数

Java String.replace所有带命名组的反向引用

如何在Java String.replaceAll方法中引用命名捕获组?

作为我正在尝试做的简化示例,请说我有正则表达式

\{(?<id>\d\d\d\d):(?<render>.*?)\}
Run Code Online (Sandbox Code Playgroud)

表示字符串中的标记.字符串中可以有多个标记,我想用"render"捕获组的内容替换所有标记.

如果我有一个字符串

String test = "{0000:Billy} bites {0001:Jake}";
Run Code Online (Sandbox Code Playgroud)

并希望得到一个结果"Billy bites Jake",我知道我可以完成我的目标

test.replaceAll(tagRegex, "$2")
Run Code Online (Sandbox Code Playgroud)

但我希望能够使用类似的东西

test.replaceAll(tagRegex, "$render")`
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?用"$render"我得到IllegalArgumentException: Illegal group reference.

java regex backreference named-captures

0
推荐指数
1
解决办法
626
查看次数