【问题标题】:Match the atlassian wiki markup for "a" link in a given string of text匹配给定文本字符串中“a”链接的 atlassian wiki 标记
【发布时间】:2021-02-22 00:14:51
【问题描述】:

我需要帮助创建一个 c# 正则表达式模式,该模式将从字符串中查找“a”链接标记。

这是一个示例输入文本: string text = "some line of text with random [ in the line. [http://example.com] [link title|http://example.com]";

我无法在 [http://example.com][link title|http://example.com] 上匹配

我尝试了很多失败的模式,这里只是最后两个:

@"\[(?<innerHtml>[.^\]]+)\|(?<href>[.^\]]+)\]\s"
@"\[(?<innerHtml>[^[]+.+)\]"

它们中的大多数返回一个匹配,如“字符串文本”所示。

in the line. [http://example.com] [link title|http://example.com

规格:

  • 这是单行文本,不可能有\n\r。
  • 第一个 [ 可以在行首,一行可以以 ] 结尾。
  • 如果文本中存在 2 个链接标记,则它们之间将始终有一个空格“...] [...”。
Markup Replace
[href] @"&lt;a href=""${href}""&gt;${href}&lt;/a&gt;"
[innerHtml|href] @"&lt;a href=""${href}""&gt;${innerHtml}&lt;/a&gt;"

【问题讨论】:

  • 我认为您正在尝试这样做:\[(?:(?&lt;innerHtml&gt;[^[|\]]+)\|)?(?&lt;href&gt;[^[\]]+)\]。这是demo
  • 完美!谢谢

标签: c# regex


【解决方案1】:

几点说明:

  • 要使用否定字符类,^ 字符必须紧跟左括号(即[^...]。否则,它被视为文字字符。

  • 为了匹配没有标题的链接,第一部分需要是可选的。

您可以使用以下模式:

\[(?:(?<innerHtml>[^[|\]]+)\|)?(?<href>[^[\]]+)\]

Demo.

细分:

  • \[ - 从字面上匹配 [ 字符。
  • (?: - 非捕获组的开始。
    • (?&lt;innerHtml&gt; - 第一个命名组的开始。
      • [^[|\]]+ - 一个否定类,用于匹配除 [|] 之外的多个字符。
    • ) - 关闭命名组。
    • \| - 从字面上匹配 | 字符。
  • ) - 关闭非捕获组。
  • ? - 表示上一组是可选的。
  • (?&lt;href&gt;[^[\]]+) - 匹配除[] 之外的一个或多个字符,并将它们捕获到第二个命名组中。
  • \] - 从字面上匹配 ] 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2018-03-15
    • 1970-01-01
    • 2011-07-12
    • 2013-12-24
    • 2014-08-30
    相关资源
    最近更新 更多