给定目标字符串
a{b}{c}{d}
我正在寻找一个返回的正则表达式:b
,c
,d
({
和}
之间的值。
我使用了以下正则表达式:[^{}]+(?:{([^{}]+)})+
但它只返回最后一个值d
。
我还试图通过将第一个匹配部分[^{}]+
更改为[^{}]+?
来使其变得懒惰,但没有区别。
为什么非捕获组不支持+
量词?
你能建议一个有效的正则表达式吗?
修改
继续查看并使用以下来自WiktorStribiżew的回答我发现以下更加简单的([^{}]+)/g
,它返回所有不带{}
的字符串,我可以轻松跳过第一项(开头的字符串)
答案 0 :(得分:0)
您不需要量化的捕获组,因为找到每个连续的组值,前一个值被重写(正好您所观察到的)。使用{([^{}]+)}
正则表达式模式(捕获{
和}
之间的内容)和/g
修饰符来查找多个匹配项:
#!/usr/bin/perl
use warnings;
use feature 'say';
$s = "a{b}{c}{d}";
my @res = ($s) =~ /{([^{}]+)}/g;
say "@res";
请参阅IDEONE demo
正则表达式细分:
{
- 打开文字大括号([^{}]+)
- 第1组:{
和}
以外的一个或多个字符(因此,在{...}
内,不能有{
如果这不是您所需要的,请替换为([^}]+)
)}
- 关闭文字大括号 注意:如果您使用/([^{}]+)/g
regex,它将匹配由{
和}
以外的字符组成的所有子字符串,因此会捕获超过{...}
只是{{1}}