using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main(string[] args)
{
var longUrl = "http://stackoverflow.com/questions/20494457/limiting-the-number-of-characters-using-regular-expression";
var shortUrl = "http://stackoverflow.com/questions/20494457";
Console.WriteLine(GetHtml(longUrl)); // should truncate
Console.WriteLine(GetHtml(shortUrl)); // should not truncate
}
public static string GetHtml(string url, int maxLength = 50)
{
var match = Regex.Match(url, String.Format("(https?://[^ ]{{{0}}})?[^ ]+", maxLength));
var displayText = match.Groups[1].Length > 0 ? String.Format("{0}...", match.Groups[1]) : match.ToString();
return String.Format("<a target=\"_blank\" href=\"{0}\">{1}</a>", match, displayText);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGV4dC5SZWd1bGFyRXhwcmVzc2lvbnM7CgpwdWJsaWMgY2xhc3MgVGVzdAp7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgewoJICAgIHZhciBsb25nVXJsID0gImh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjA0OTQ0NTcvbGltaXRpbmctdGhlLW51bWJlci1vZi1jaGFyYWN0ZXJzLXVzaW5nLXJlZ3VsYXItZXhwcmVzc2lvbiI7CgkgICAgdmFyIHNob3J0VXJsID0gImh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjA0OTQ0NTciOwoJICAgIENvbnNvbGUuV3JpdGVMaW5lKEdldEh0bWwobG9uZ1VybCkpOyAvLyBzaG91bGQgdHJ1bmNhdGUKCQlDb25zb2xlLldyaXRlTGluZShHZXRIdG1sKHNob3J0VXJsKSk7IC8vIHNob3VsZCBub3QgdHJ1bmNhdGUKCX0KICAgIAoJcHVibGljIHN0YXRpYyBzdHJpbmcgR2V0SHRtbChzdHJpbmcgdXJsLCBpbnQgbWF4TGVuZ3RoID0gNTApCgl7CgkJdmFyIG1hdGNoID0gUmVnZXguTWF0Y2godXJsLCBTdHJpbmcuRm9ybWF0KCIoaHR0cHM/Oi8vW14gXXt7ezB9fX0pP1teIF0rIiwgbWF4TGVuZ3RoKSk7CgkJdmFyIGRpc3BsYXlUZXh0ID0gbWF0Y2guR3JvdXBzWzFdLkxlbmd0aCA+IDAgPyBTdHJpbmcuRm9ybWF0KCJ7MH0uLi4iLCBtYXRjaC5Hcm91cHNbMV0pIDogbWF0Y2guVG9TdHJpbmcoKTsKCQlyZXR1cm4gU3RyaW5nLkZvcm1hdCgiPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cInswfVwiPnsxfTwvYT4iLCBtYXRjaCwgZGlzcGxheVRleHQpOwoJfQp9