C# 嵌套标签的正则表达式

标签 c# regex nested regex-negation

让我们从一个小例子开始;我有以下文字:

[[ some tag [[ with tag nested ]] and again ]]

我想匹配 [[ 带有嵌套标签 ]] 但不是 [[ 某些标签 [[ 带有嵌套标签 ]] 。简单

\[\[(?<content>.+?)\]\]

显然没用。所以我创建了正则表达式:

\[\[(?!.*?\[\[.*?\]\].*?)(?<content>.+?)\]\]

不幸的是,它不匹配使用 C#(使用 MatchOptions.SingleLine)的任何内容,而 PHP 的 preg_match 可以完美工作。

有任何线索/想法吗?任何帮助将不胜感激。

最佳答案

据我所知,查找最里面的括号之一的最简单方法是:

var match = Regex.Match(input, @"^.*(\[\[(.*?)\]\])", RegexOptions.Singleline);

这是有效的,因为它找到了最后 [[(因此后面没有更多的[[,所以它不能包含任何嵌套标签),然后是紧随其后的 ]]。当然,这是假设格式良好的;如果字符串的开始/结束括号不正确匹配,则可能会失败。

找到最里面的括号后,您可以将其从输入字符串中删除:

input = input.Remove(match.Groups[1].Index, match.Groups[1].Length);

然后在 while 循环中重复该过程,直到正则表达式不再匹配。

关于C# 嵌套标签的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4754304/

相关文章:

c# - LogonUser 仅适用于我的域

c# - NEST:在条件下添加术语查询

php - 仅删除 2 个字符串之间的空格

python - sed 和 python 正则表达式之间的不一致

javascript - 函数内的函数内的 JS 函数等等

c# - 我怎样才能从一个非类型化的表达式返回到一个类型化的表达式?

c# - 如何在运行时在 WinForms 中设置多个按钮文本?

java表达式查找多个单词

Javascript:通过数字索引而不是键值循环遍历对象

c# - 为什么在 .NET 5 中用作泛型类型参数时引用类型为 "slower"?