RegexPlanet是否支持.NET的替换字符串中的捕获组引用,如果是,如何?

时间:2013-08-03 19:15:19

标签: .net regex

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

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

和以下替换字符串:

$18888$29999$3

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

例如,使用输入in-in,它会生成$18888$29999而不是88889999,就好像第三个组匹配(空字符串),但前两个组不匹配。 / p>

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

命名捕获:

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

参考方法:

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

已经能够获得未命名和命名的捕获方法,以便处理琐碎的案例。

任何想法发生了什么?在相关的一点上,你能推荐任何支持替换和匹配的RegexPlanet替代品吗?

2 个答案:

答案 0 :(得分:2)

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

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

如此工作fiddle所示。

命名引用也可以使用,但只能使用(?'name'...),而不是(?<name>...),并且可以使用${name}引用。 <>命名引用的问题可能是网站中与在HTML上下文中使用相关的错误。

可以在ideone example上看到使用(?<name>...)的工作示例。

答案 1 :(得分:1)

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

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