【问题标题】:Does RegexPlanet support capture group references in the replacement string for .NET and, if so, how?RegexPlanet 是否支持在 .NET 的替换字符串中捕获组引用,如果支持,如何支持?
【发布时间】:2013-08-03 19:15:19
【问题描述】:

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

(.*)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 替代品?

【问题讨论】:

  • 不清楚您所说的“在参考字符串中”是什么意思-您真正想要实现什么?你能用简单的 C# 或 VB 代码来演示它,而不是参考一个特定的网站吗?
  • 我没有理由怀疑 .NET 的正则表达式支持的底层功能,我想我通过阅读文档了解它。我的问题实际上是关于网站的行为。我正在尝试实现 fiddle.re/ykf3a 的 .NET 等效项,这仅在我试图回答别人的 SO 问题并想提供类似小提琴的参考时出现。
  • 具体来说,在我在上一条评论中分享的 Java 案例中,它在结果中包含一列,指示各种“替换”方法返回的内容。当我为 .NET 做同样的事情时,没有这样的列。也许这表明 .NET 网站上缺乏对“替换”的支持,但我想知道为什么他们有“替换”输入字段。
  • 对不起,我指的是标题和首句中的“替换字符串”而不是“参考字符串”。
  • 但是我们既不知道输入,也不知道替换,也不知道您使用的正则表达式。我们在这里真的没有足够的上下文。请给我们一个您正在尝试的具体示例

标签: .net regex


【解决方案1】:

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

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

如图所示fiddle

命名引用也可以使用,尽管只能使用 (?'name'...),而不是 (?&lt;name&gt;...),并且可以使用 ${name} 引用。 &lt;&gt; 命名引用的问题可能是站点中的一个错误,与它在 HTML 上下文中的使用有关。

可以在ideone example 上看到使用 (?&lt;name&gt;...) 的工作示例。

【讨论】:

    【解决方案2】:

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

    不过,对于命名捕获,您似乎是对的 - (?&lt;foo&gt;...) 命名为捕获,${foo} 作为其替代品不起作用(我收到一条消息说 ERROR: error ())。

    【讨论】:

    • 我实际上得到了 (?'foo'...) 以及 ${1} 用于未命名组的情况。我之前报告的奇怪行为可能确实与我正在尝试的特定测试用例有关(触摸 Jon Skeet)。刚才在尝试提出一个简单的例子在这里分享时,我发现了成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多