このコードで何が問題になっていますか?私の目標は、テキスト内のURLを見つけてハイパーリンクタグに配置することです。私は古いdiegoperini正規表現(クレジットhttps://mathiasbynens.be/demo/url-regex)を使用しています。 入力が1行で、最後にスペースがない場合はすべてうまく行きます。C#で複数のラインとスペースの正規表現の問題
ページでは、この正規表現は有効です(グローバルとマルチラインがチェックされています)が、何も見つかりません。以下の単純化された正規表現文字列での作業テスト済み
class Program
{
static void Main(string[] args)
{
String sourcestring = @"Tralala
bla bla bla
https://iqesonline.lt/index.cfm
bla bla bla bla
https://iqesonline.lt/index.cfm?id=99061c04-441e-a138-8254-6c441f7f59b5
ulala.
trampampam";
// WORKS sourcestring = "https://iqesonline.lt/index.cfm?id=98061c04-441e-a138-8254-6c441f7f59b5";
// DOES NOT WORK sourcestring = "https://iqesonline.lt/index.cfm?id=98061c04-441e-a138-8254-6c441f7f59b5 ";
ParseLinksToHtml(sourcestring);
}
public static string ParseLinksToHtml(string tekstas)
{
string result = tekstas;
if (!string.IsNullOrEmpty(result))
{
// NOT WORKING Regex rx = new Regex(@"^(?:(?:https?|ftp)://)(?:\S+(?::\S*)[email protected])?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$");
//NOT WORKING TOO
Regex rx = new Regex(@"^(?:(?:https?|ftp)://)(?:\S+(?::\S*)[email protected])?(?:(?!10(?:\.\d{1,3}){3})(?!127(?:\.\d{1,3}){3})(?!169\.254(?:\.\d{1,3}){2})(?!192\.168(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))(?::\d{2,5})?(?:/[^\s]*)?$", RegexOptions.Multiline | RegexOptions.IgnoreCase);
result = rx.Replace(result, delegate (Match match)
{
string url = match.ToString();
if (url.ToLower().StartsWith("www."))
{
url = "http://" + url;
}
return string.Format("<a href=\"{0}\" target=\"_blank\">{1}</a>", url, match.ToString());
});
}
return result;
}
}
なぜないのhttps:// [^ \ s]は* |のftp:// [^ \ s]は* – jdweng
削除してみてください "^" 初めとあなたのパターンの末尾に "$" で – Magnetron