c# - 匹配给定文本字符串中“a”链接的 atlassian wiki 标记
问题描述
我需要帮助创建 ac# 正则表达式模式,该模式将从字符串中查找“a”链接标记。
这是一个示例输入文本:
string text = "some line of text with random [ in the line. [http://example.com] [link title|http://example.com]";
我无法让它在[http://example.com]
or上匹配[link title|http://example.com]
我尝试了许多失败的模式,这里只是最后两个:
@"\[(?<innerHtml>[.^\]]+)\|(?<href>[.^\]]+)\]\s"
@"\[(?<innerHtml>[^[]+.+)\]"
它们中的大多数返回匹配项,如“字符串文本”所示。
in the line. [http://example.com] [link title|http://example.com
眼镜:
- 这是单行文本,不可能有 \n\r。
- 第一个 [ 可以在行首,一行可以以 ] 结尾。
- 如果文本中存在 2 个链接标记,则它们之间将始终有一个空格“...] [...”。
标记 | 代替 |
---|---|
[href] |
@"<a href=""${href}"">${href}</a>" |
[innerHtml|href] |
@"<a href=""${href}"">${innerHtml}</a>" |
解决方案
几点注意事项:
要使用否定字符类,该
^
字符必须紧跟在左括号之后(即,[^...]
。否则,它被视为文字字符。为了匹配没有标题的链接,第一部分需要是可选的。
您可以使用以下模式:
\[(?:(?<innerHtml>[^[|\]]+)\|)?(?<href>[^[\]]+)\]
演示。
分解:
\[
[
-从字面上匹配字符。(?:
- 非捕获组的开始。(?<innerHtml>
- 第一个命名组的开始。[^[|\]]+
[
- 一个否定类,用于匹配除、|
和之外的多个字符]
。
)
- 关闭命名组。\|
|
-从字面上匹配字符。
)
- 关闭非捕获组。?
- 表示上一组是可选的。(?<href>[^[\]]+)
[
- 匹配除and以外的一个或多个字符,]
并将它们捕获到第二个命名组中。\]
]
-从字面上匹配字符。
推荐阅读
- css - 在 CSS Grid 中,为什么 1FR+9FR 在小屏幕尺寸中的行为与 10FR 不同?
- coq - 实数公理中的排除中间
- github-api - 如何启用 GitHub 预览功能,例如主题?
- javascript - 传单:使用 GeoJSON 掩码添加图像叠加层
- cakephp-3.0 - 如何在相关表中使用我的实体名称而不是 id
- javascript - String 和 Int 数组排序
- jquery - Json数据图表
- r - 使用R将加扰的中文字符串转换回正常
- android - 如何按意图在设置中打开“应用程序通知”屏幕(附屏幕截图)
- sql-server - SQL Server 中的 AS 和 = 有什么区别?