我想我需要一些正则表达式的帮助。我想找到像<?abc?>
这样的所有标签,这样我就可以用里面运行的代码的结果替换它。我只需要帮助重新标记标记/代码字符串,而不是解析内部代码:p。
<b><?abc print 'test' ?></b>
会产生<b>test</b>
编辑:不是特别,但一般来说,匹配(<?[chars] (code group) ?>)
答案 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")
这样的事情应该可以解决问题。改变你认为合适的正则表达式