我正在解析 BB 代码图像标签:
[img]http://imagesource.com[/img]
我正在使用以下 Replace() 函数:
Regex.Replace(msg, @"\[img\]([^\]]+)\[\/img\]", @"<img src=""$1"" border=""0"" />", RegexOptions.IgnoreCase);
我需要在解析时获取 URL。我需要知道“$1”的价值。是否可以? Regex 类以某种方式将“$1”字符串替换为我需要的值,因此必须有一种方法来获取它。
听起来您正在寻找Replace
具有接受 MatchEvaluator 的重载的方法。可以找到该方法的 MSDN 页面here http://msdn.microsoft.com/en-us/library/ms149475.aspx.
试试这个:
string input = "[img]http://imagesource.com[/img]";
string pattern = @"\[img]([^\]]+)\[\/img]";
string result = Regex.Replace(input, pattern, m =>
{
var url = m.Groups[1].Value;
// do something with url here
// return the replace value
return @"<img src=""" + url + @""" border=""0"" />";
},
RegexOptions.IgnoreCase);
这使用多语句 lambda 来简化组的工作并在返回替换值之前执行更多逻辑。当然,你也可以这样做:
string result = Regex.Replace(input, pattern,
m => @"<img src=""" + m.Groups[1].Value + @""" border=""0"" />",
RegexOptions.IgnoreCase);
在上述情况下,不需要return
但它只是返回原始字符串而不进行额外的评估。您可以添加一些三元运算符并添加该逻辑,但它看起来会很混乱。多语句 lambda 更加简洁。如果它太大或将在其他中重用,您可以考虑用自己的方法将其分解,如前面提到的 MSDN 链接所示Regex.Replace
努力。
顺便说一句,我还通过删除转义符稍微简化了您的模式]
。仅有开口[
需要逃脱。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)