/ / Wyrażenie regularne zastępujące linki tylko ich etykietami - asp.net, regex

Wyrażenie regularne zastępujące linki tylko etykietami - asp.net, regex

Chcę przekonwertować link do określonego tekstu za pomocą wyrażenia regularnego. Podczas wiązania datagrid, mam funkcję, która konwertuje (wygląd: tekst) na link. Moja funkcja jest tutaj.

Private Function Convertlook(ByVal str As String) As String

Dim look As String
Dim pattern As String = "(look: ([a-z0-9$&.öışçğüs]+))"
Dim regex As New Regex(pattern, RegexOptions.IgnoreCase)
Dim htmlanc As New System.Web.UI.HtmlControls.HtmlAnchor()
Dim postbackRef As String = Page.GetPostBackEventReference(htmlanc, "$1")
htmlanc.HRef = postbackRef
str = regex.Replace(str, "(look: <a href=""javascript:" & htmlanc.HRef & """><font color=""#CC0000"">$1</font></a> )")
look = str
Return look

end function

Problem polega na tym, że chcę edytować tekst, jak mogę go odwrócić (patrz: tekst)? Czy powinienem ponownie użyć wyrażenia regularnego i co może być jego prawidłowym wyrażeniem?

Odpowiedzi:

1 dla odpowiedzi № 1

Wygląda na to, że regex może zostać zredukowany do „wszystkiego między nawiasami kątowymi”

Dim regex As New Regex(".*>(.*)</font.*", RegexOptions.IgnoreCase)
str = regex.Replace(str, "(look: $1)")

0 dla odpowiedzi nr 2

Nie byłoby łatwiej zachować oba przekonwertowanei nieprzekształconą wersję tekstu (tj. w ViewState lub ControlState)? To zaoszczędziłoby ci wielu kłopotów. Co by się stało, gdyby oryginalny tekst zawierał ciąg taki jak „<czcionka”?

Sugeruję: nie idź tam, nie warte wysiłku. Śledź źródło.


0 dla odpowiedzi № 3

Zmieniłem twój kod w C #, oto czego chcesz:

string str = "(look: trialText)";
string look = string.Empty;
string pattern = @"(look: ([a-z0-9$&.öışçğüs]+))";
Regex regex = new Regex(pattern, RegexOptions.IgnoreCase);
System.Web.UI.HtmlControls.HtmlAnchor htmlanc = new System.Web.UI.HtmlControls.HtmlAnchor();
string postbackRef = Page.GetPostBackEventReference(htmlanc, "$1");
htmlanc.HRef = postbackRef;

// Here I capture the text inside the anchor :
Match matchedText = regex.Match(str);
string textInsideLink = regex.Replace(matchedText.Value, "$1"); // textInsideLink = "trialText"

str = regex.Replace(str, "(look: <a href="javascript:" + htmlanc.HRef + ""><font color="#CC0000">$1</font></a> )");

// I replace captured text with another text :
str = Regex.Replace(str, "(" + textInsideLink + ")", "anotherTextInsideLink");
// str = "(look: <a href="javascript:__doPostBack("","anotherTextInsideLink")"><font color="#CC0000">anotherTextInsideLink</font></a> )"