在html文档中查找/解析服务器端<! - ?abc? - > - like标签

时间:2010-12-21 07:18:09

标签: c# html regex

我想我需要一些正则表达式的帮助。我想找到像<?abc?>这样的所有标签,这样我就可以用里面运行的代码的结果替换它。我只需要帮助重新标记标记/代码字符串,而不是解析内部代码:p。

<b><?abc print 'test' ?></b>会产生<b>test</b>

编辑:不是特别,但一般来说,匹配(<?[chars] (code group) ?>)

3 个答案:

答案 0 :(得分:2)

这将构建字符串source的新副本,将<?abc code?>替换为process(code)

的结果
Regex abcTagRegex = new Regex(@"\<\?abc(?<code>.*?)\?>");

StringBuilder newSource = new StringBuilder();
int curPos = 0;

foreach (Match abcTagMatch in abcTagRegex.Matches(source)) {
    string code = abcTagMatch.Groups["code"].Value;
    string result = process(code);

    newSource.Append(source.Substring(curPos, abcTagMatch.Index));
    newSource.Append(result);
    curPos = abcTagMatch.Index + abcTagMatch.Length;
}

newSource.Append(source.Substring(curPos));
source = newSource.ToString();

N.B。我无法测试此代码,因此某些功能可能略有错误,或者可能存在一些错误。

答案 1 :(得分:1)

var new Regex(@"<\?(\w+) (\w+) (.+?)\?>")

这将采用此来源

<b><?abc print 'test' ?></b>

并将其分解为:

Value: <?abc print 'test' ?>

    SubMatch: abc
    SubMatch: print
    SubMatch: 'test' 

然后可以将这些发送到一个方法,该方法可以根据部件的不同来处理它。

如果您需要更高级的语法处理,我需要超越正则表达式。我相信。

我使用Antlr设计了一个模板引擎,但这更复杂;)

答案 2 :(得分:0)

exp = new Regex(@"<\?abc print'(.+)' \?>");
str = exp.Replace(str, "$1")

这样的事情应该可以解决问题。改变你认为合适的正则表达式