62,041
社区成员
发帖
与我相关
我的任务
分享
{html}
1
{html}
2
{/html}
3
{/html}
{html}4{/html}
//提供思路 不需要正则 就可以实现简单的标签截取, 如果要是标签复杂, 把检索字符串方法换成正则的就可以了
List<string> list = new List<string>();
string str = "{html}1{html}2{/html}3{/html}{html}4{/html}";
string startLabel = "{html}";
string endLabel = "{/html}";
int start = str.IndexOf(startLabel) + startLabel.Length;
int end = str.IndexOf(endLabel, start);
int tempstart = str.IndexOf(startLabel, start, end - start);
while (start > 5)
{
while (tempstart > -1)
{
end = str.IndexOf(endLabel, end + endLabel.Length);
tempstart = str.IndexOf(startLabel, tempstart + startLabel.Length, end - (tempstart + startLabel.Length));
}
list.Add(str.Substring(start, end - start));
start = str.IndexOf(startLabel, end + endLabel.Length, str.Length - (end + endLabel.Length))+startLabel.Length;
end = str.IndexOf(endLabel, start);
}
//结果 list[0]="1{html}2{/html}3" list[1]="4"
string validatorPattern = @"^[^\{}]*((\{(?'tag'\w+)}[^\{}]*)+((?'close-tag'\{/\k<tag>})[^\{}]*)+)*[\{}]*(?(tag)(?!))$";
string locationPattern = @"(\{(?'tag'\w+)}[^\{}]*)((\{(?'tag'\w+)}[^\{}]*)+((?'close-tag'\{/\k<tag>})[^\{}]*)+)*(?'close-tag'\{/\k<tag>})(?(tag)(?!))";
string input = @"{html}1{html}2{/html}3{/html}{html}4{/html}";
Match validator = Regex.Match(input, validatorPattern, RegexOptions.Singleline);
if (validator.Success == true)
{
var locator = new Regex(locationPattern, RegexOptions.Singleline);
foreach (Match m in locator.Matches(input))
{
Console.WriteLine("Block at {0}", m.Index);
Console.WriteLine(m.Value);
}
}
else
{
Console.WriteLine("Match failed.");
}
不如楼主是否需要的这个效果?
MSDN正则表达式
http://msdn.microsoft.com/zh-cn/library/az24scfc(v=vs.100).aspx
分组构造之平衡组定义
http://msdn.microsoft.com/zh-cn/library/bs2twtah(v=vs.100).aspx
反向引用构造之命名的后向引用
http://msdn.microsoft.com/zh-cn/library/thwdfzxy(v=vs.100).aspx