【问题标题】:Not getting multiple substitutions in Perl regex在 Perl 正则表达式中没有得到多个替换
【发布时间】:2011-06-10 14:30:12
【问题描述】:

我正在尝试对一行文本执行多个替换,但它似乎不起作用。

QUEUE(DLR_BRKR_TIXX_IN_PROD) TYPE(QLOCAL) CURDEPTH(0) QUEUE(DLR_BRKR_TIXX_OUT_PROD) TYPE(QLOCAL) CURDEPTH(0) QUEUE(TKT_BRKR_TIXX_IN_2) TYPE(QLOCAL) CURDEPTH(0) QUEUE(TKT_BRKR_TIXX_OUT_2) TYPE(QLOCAL) CURDEPTH(0)

Regex: s/QUEUE\(([^)]*)\).*CURDEPTH\((\d+)\)/\1:\2/g

这只是匹配和替换第一个匹配:QUEUE(DLR_BRKR_TIXX_IN_PROD) TYPE(QLOCAL) CURDEPTH(0)。

我是否遗漏了一些非常明显的东西?

谢谢。

【问题讨论】:

  • 在开发 Perl 代码时应始终启用警告。

标签: regex perl


【解决方案1】:

我想你会发现它实际上从第一场比赛到最后一场比赛都是一次性匹配的,因为.* 是贪婪的。

试试

s/QUEUE\(([^)]*)\).*?CURDEPTH\((\d+)\)/\1:\2/g

改为。

【讨论】:

  • 你打败了我几秒钟 :-( , +1.
  • 苏诺法。我尝试了非贪婪匹配,但在不同的位置。谢谢!
猜你喜欢
  • 2017-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-21
  • 2021-11-24
  • 1970-01-01
  • 2016-10-29
相关资源
最近更新 更多