首页 > 解决方案 > 如何找到特定 BBCode 标签的索引位置(正则表达式)

问题描述

我有一个字符串,比如说:

[s]AB[/s]23[sb]45[/sb]AB45ABABAB

我想找到由包含字母 s 的标记包围的所有索引,因此包括 [s] 和 [sb]。

findIndices("[s]01[/s]23[sb]45[/sb]AB45ABABAB", "s")的函数调用将返回列表 [0, 1, 4, 5]。请注意,索引忽略所有 BBCode。换句话说,它认为第一个“A”字符的索引是 0,而不是 3。

如何在 C# 中实现 findIndices。我尝试使用 System.Text.RegularExpressions 但我遇到了麻烦,困难在于找到与删除 BBCode 的字符串相关的索引。

标签: c#regexbbcode

解决方案


像这样的正则表达式模式(?<=[^/]s.?\]).+?(?=\[)将匹配例如AB45

我们检查(向后看)我们后面是否有 ans和 a ,但没有,然后匹配字符直到我们点击 a 。我可能错过了一些边缘情况,所以要小心并测试一下。]/[

(如果您特别需要索引,可以从正则表达式匹配对象中获取这些索引)


推荐阅读