2

在以下正则表达式的情况下:

(.*)in(.*)-in(.*)

和以下替换字符串:

$18888$29999$3

根据http://fiddle.re/8ky3a,网站 RegexPlanet 似乎将我的一些捕获组引用视为文字。

例如,使用输入in-in它产生$18888$29999而不是88889999,就好像第三组匹配(到空字符串),但前两组没有。

我尝试了以下替代方法但没有成功:

命名捕获:

(?'name'...)       -- Captures, but can't be referenced
(?<name>...)       -- Generates error on site

参考方法:

${n}               -- Where n is the capture group number
${name}

已经能够使用未命名和命名的捕获方法来处理琐碎的情况。

有什么想法吗?在相关点上,您能否推荐任何支持替换和匹配的 RegexPlanet 替代品?

4

2 回答 2

2

RegexPlanet 的 .NET 机制在大多数情况下运行良好。上述替换字符串的问题在于,您不能使用数字跟随编号的组引用,而必须将其括起来{},如下所示:

${1}8888${2}9999$3

如这个工作小提琴所示。

命名引用也可以工作,尽管只能用(?'name'...), not (?<name>...), 并且可以用${name}. 命名引用的问题<>可能是站点中与其在 HTML 上下文中的使用相关的错误。

在这个ideone 示例(?<name>...)中可以看到一个使用的工作示例。

于 2013-08-03T20:43:26.110 回答
1

我无法完全重现您的问题。使用(...)捕获组时,$1使用 .NET 引擎在 regexplanet.com 上用作替换字符串。

但是,对于命名捕获,您似乎是对的 -(?<foo>...)因为命名捕获和${foo}它的替换不起作用(我收到一条消息说ERROR: error ())。

于 2013-08-03T19:36:34.867 回答