我正在编写一个系统,用户可以看到的所有内容都是可翻译的。这意味着每个段落,标题,链接文本,工具提示等都包含在数据库表中,我使用标记来获取数据。例如,[Tag 1]
可以是登录,也可以更改为其他内容 - 它可以由公司自己定义。
我的工作非常完美。我重写了Page类中的Render方法来替换所有这些标记。我有一个正则表达式匹配格式为[tag x]
的所有标签,其中x是1或更多数字,即数据库中翻译的ID;我正在使用的正则表达式是@"\[(Text|Tag) ([0-9]*)]
。
我遇到的问题是,例如,如果您在标记中有标记 - 例如[tag 69]
定义为[tag 70][tag 71][tag 72]
- 当文本位于文本区域内时,它仍会被替换,所以标签69将显示为另外3个放在一起。我想阻止替换textareas中包含的标签。我的第一个想法是,这很容易 - 但后来我意识到如果你有<textarea>[tag 1]</textarea>[tag 2]<textarea>[tag 3]</textarea>
,标签2将不会被替换。
我必须承认我不是正规表达的专业人士 - 我想成为现在,但我现在没有时间在我的手上。任何人都可以提出一种方法,我可以实现我想要实现的目标吗?提前谢谢。
此致 理查德
答案 0 :(得分:1)
所以问题是如何匹配未包含在textarea中的[Tag n]
?你可以使用负面的后视。
(?<!\<textarea\>)\[(tag|text) [0-9]+\]
代码:
var input = "<textarea>[tag 1]</textarea>[tag 2]<textarea>[tag 3]</textarea>";
Regex regex = new Regex(@"(?<!\<textarea\>)\[(tag|text) [0-9]+\]");
var matches = regex.Matches(input);
foreach (var match in matches)
{
Console.WriteLine(match);
}
输出:
[tag 2]