在以下正则表达式的情况下:
(.*)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替代品吗?
答案 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>