我将 BBcode 转换器编写为 html。
转换器应跳过未封闭的标签。
我考虑了两种选择:
1)使用一个正则表达式调用一次匹配所有标签,例如:
Regex re2 = new Regex(@"\[(\ /?(?:b|i|u|quote|strike))\]");
MatchCollection mc = re2.Matches(sourcestring);
然后,使用 2 个指针循环 MatchCollection 以查找开始标签和开放标签,然后替换为正确的 html 标签。
2)对每个标签多次调用正则表达式并直接替换:
Regex re = new Regex(@"\[b\](.*?)\[\/b\]");
string s1 = re.Replace(sourcestring2,"<b>$1</b>");
什么更有效?
第一个选项使用一个正则表达式,但需要我循环所有标签并找到所有对,并跳过没有对的标签。
另一个积极的事情是我不关心标签之间的内容,我只是使用位置来替换它们。
在第二个选项中,我不需要担心循环和特殊的替换功能。
但需要执行多个正则表达式并替换。
你有什么建议?
如果第二个选项是正确的,
正则表达式有问题\[b\](.*?)\[\/b\
]
我如何修复它以匹配多行,例如:
[b]
test 1
[/b]
[b]
test 2
[/b]
一种选择是使用更多类似 SAX 的解析,而不是寻找特定的正则表达式[
,然后让你的程序以某种方式处理这个问题,寻找]
,甚至处理这个,等等。虽然比正则表达式更冗长,但它可能更容易理解,并且不一定会更慢。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)