【问题标题】:Is it possible to repeat a captured group in the substitution in regular expressions? [duplicate]是否可以在正则表达式的替换中重复捕获的组? [复制]
【发布时间】:2016-06-09 09:37:42
【问题描述】:

是否可以使用正则表达式重复捕获的组多次,并附加限制,即在捕获组中也可以找到要重复的数量?

例子:

Regex: /(a)([0-9])/g
String: ba1na3na2
Expected result: banaaanaa

我从来没有见过这样的东西,但也许我一直在寻找错误的地方。注意:我正在使用 Perl - 但我也有兴趣查看其他风格的答案。

【问题讨论】:

  • 你听到上面的e修饰符了吗?
  • 您希望正则表达式本身如何做到这一点——您将如何使用它? m/ 只返回匹配项,我想。在s/?这改变了字符串,可以吗?
  • 我喜欢示例数据! :)

标签: regex perl substitution capturing-group


【解决方案1】:

在 perl 中,这个正则表达式会给你预期的结果,你的正则表达式是匹配的,而 s 正则表达式是一个替换:

s/(a)([0-9])/$1 x $2/eg;

像这样:

my $str = 'ba1na3na2';
$str =~ s/(a)([0-9])/$1 x $2/eg;
print $str;

香蕉

  • e 修饰符将右侧计算为表达式。
  • x 运算符重复字符串。

更新:

正如@AvinashRaj 所说,s/(a)([0-9]+)/$1 x $2/eg; 可能更合适。看你要不要 ba20nana成为

  • baa0nana

  • 呸呸呸呸呸

【讨论】:

  • 这个s/(a)([0-9]+)/$1 x $2/eg; 会更合适。
  • 是的。取决于 OP 的要求。
  • 我正在保存这些讨厌的正则表达式技巧,你们意识到了吗?那样可以么? :)
猜你喜欢
  • 2014-08-30
  • 2010-11-19
  • 2013-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多