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 № 1Wyglą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> )"