我想我需要一些正则表达式帮助。我想查找像<?abc?>
这样的所有标签,以便我可以用代码运行的结果替换它。我只需要帮助重新编码标记/代码字符串,而不是解析里面的代码:p。在html文档中查找/解析服务器端<?abc?> -like标签
<b><?abc print 'test' ?></b>
会导致<b>test</b>
编辑:不明确,但一般来讲,匹配(<?[chars] (code group) ?>)
我想我需要一些正则表达式帮助。我想查找像<?abc?>
这样的所有标签,以便我可以用代码运行的结果替换它。我只需要帮助重新编码标记/代码字符串,而不是解析里面的代码:p。在html文档中查找/解析服务器端<?abc?> -like标签
<b><?abc print 'test' ?></b>
会导致<b>test</b>
编辑:不明确,但一般来讲,匹配(<?[chars] (code group) ?>)
这将建立字符串source
的新副本,用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();
注:结果替换<?abc code?>
我还没有能够测试这些代码,所以一些函数可能有点错误,或者可能会有一些错误。
我通常不会主张使用'。*?',但是所有可以想到的'所有与这一系列角色'相匹配的替代方案都过于复杂,乱。 – ICR 2010-12-21 12:15:17
*我想要一切!但很少有!*嘿嘿 – 2010-12-21 18:44:09
如果我只是做了代码组的输出,它似乎'<?abc echo'?>'; ?>'echo in'echo''; ?>'。你也错过了第二到最后一行paren。这是一个好的开始,但我认为我已经足够了解这个错误。 – Iggyhopper 2010-12-21 20:03:30
exp = new Regex(@"<\?abc print'(.+)' \?>");
str = exp.Replace(str, "$1")
像这样的东西应该做的伎俩。更改正则表达式如何您认为合适
var new Regex(@"<\?(\w+) (\w+) (.+?)\?>")
这将以此为源
<b><?abc print 'test' ?></b>
,并打破它,就像这样:
Value: <?abc print 'test' ?>
SubMatch: abc
SubMatch: print
SubMatch: 'test'
这些就被发送到处理它的方法不同,这取决于什么零件是。
如果你需要更高级的语法处理,你需要超越正则表达式我相信。
我设计使用Antlr模板引擎,但多数民众赞成的方式更加复杂;)
你的意思是,它总是有一个打印“东西”,你会想更换整个用'东西'? –
2010-12-21 07:20:40
我不是C#专家,但概念应该像这样工作。使用某种搜索/查找功能查找<?abc print'。然后,存储该位置。从那里,找到下一个'发生了什么(为了逃避,找到下一个'没有\'的字符在它之前[\'=转义])。或者找到'?>。从那里,从位置和位置2之间的长度开始,使用第一个位置的子串函数,结果将成为“print”'“标记中的结果。 – RageD 2010-12-21 07:22:55
我想要我自己的类型的标签,我可以找到并将代码内容分组到。 '(<?php(code group)?>)' – Iggyhopper 2010-12-21 07:28:32