Próbuję dopasować ciągi, które wyglądają tak:RegEx nie działa z .NET, ale nie z innych regex wdrożeń
http://www.google.com
Ale nie jeśli występuje w szerszym kontekście tak:
<a href="http://www.google.com"> http://www.google.com </a>
regex mam że spełnia swoje zadanie w kilka różnych silników rEGEX Przetestowałem (PHP, ActionScript) wygląda następująco:
(?<!["'>]\b*)((https?://)([A-Za-z0-9_=%&@?./-]+))\b
Możesz zobaczyć, że działa tutaj: http://regexr.com?36g0e
Problem polega na tym, że ten konkretny regeks nie działa poprawnie w .NET.
private static readonly Regex fixHttp = new Regex(@"(?<![""'>]\b*)((https?://)([A-Za-z0-9_=%&@?./-]+))\b", RegexOptions.IgnoreCase);
private static readonly Regex fixWww = new Regex(@"(?<=[\s])\b((www\.)([A-Za-z0-9_=%&@?./-]+))\b", RegexOptions.IgnoreCase);
public static string FixUrls(this string s)
{
s = fixHttp.Replace(s, "<a href=\"$1\">$1</a>");
s = fixWww.Replace(s, "<a href=\"http://$1\">$1</a>");
return s;
}
Konkretnie, .NET nie wydaje się być zwrócenie uwagi na pierwszej \b*
. Innymi słowy, to właściwie nie pasuje ten ciąg:
<a href="http://www.google.com">http://www.google.com</a>
Ale to nieprawidłowo pasuje ten ciąg (uwaga na dodatkowe spacje):
<a href="http://www.google.com"> http://www.google.com </a>
Jakieś pomysły co do tego, co robię źle lub jak to obejść?
Nie ma zamiany lub dopasowania w łączu regexr ... I nie powinieneś umieszczać kwantyfikatorów na granicach słów. W .NET (myślę tutaj o C#), musisz uciec podwójnym cudzysłowom z podwójnymi cudzysłowami, aby "" stało się "" ". – Jerry
@Jerry - Tak, robię to wszystko w moim rzeczywistym C# –
Pamiętam, że korzystałem z niektórych narzędzi RE i mieli możliwość wyboru silnika wykonującego RE.A był silnik .Net, ponieważ wykonywał RE w różny sposób –