递归正则表达式是否理解命名捕获?在文档中有一个注释(?{{ 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
: …
我是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
.我还没有找到任何文件或这方面的例子,有人能指出我正确的方向吗?
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
可能是未定义的。
在打字稿中,有什么方法可以像上面那样解构正则表达式吗?
是否有任何正则表达式api或java可以在一个模式中接受多个具有相同名称的组?
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"
如何在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
.