0

段落内の絶対 URL を変更する方法:

<p>http://www.google.com</p>

段落へのhtmlリンクへ:

<p><a href=\"http://www.google.com\">http://www.google.com</a></p>

それは多くの段落になる可能性があります。正規表現urlで this: から一般的な値を切り取り、次の<p>url<p>ようにテンプレートに入れます。<p><a href=\"url\">url</a></p>

短い方法でそれを行う方法は?regex.Replace() メソッドを使用して実行できますか?

ところで: 絶対 URL の一致に使用される正規表現は次のようになります: ^(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?$( msdnから取得)

4

2 に答える 2

0

この正規表現を使用してみてください:

(?<!\")(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?(?!\")

<a href="http://www.google.com">文字列( で囲まれた)のように一致しないようにします"

そしてサンプルコード:

var inputString = @"<p>http://www.google.com</p><p><a href=\"http://www.google.com\">my web link</a></p>";
var pattern = @"(?<url>(?<!\")(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?(?!\"))";
var result = Regex.Replace(strInput, pattern, "<a href=\"${url}\">${url}</a>");

説明:

(?<!subexpression) Zero-width negative lookbehind assertion.

(?!subexpression) Zero-width negative lookahead assertion.

(?<name>subexpression) Captures the matched subexpression into a named group.

于 2012-09-22T07:58:36.630 に答える
0

正規表現を作成します: 最初の ^ と最後の $ を削除します。これは、「入力文字列全体を最初から最後まで一致させる」ことを意味します。

string regexPattern = @"(ht|f)tp(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&amp;%\$#_]*)?";

string input = @"<p>http://www.google.com</p>";

var reg = new Regex(regexPattern, RegexOptions.IgnoreCase);

// $0 - substitution, refers to  the text matched by the whole pattern    
var output = reg.Replace(input, "<a href=\"$0\">$0</a>");

置換の詳細http://msdn.microsoft.com/en-us/library/ewy2t5e0.aspx

于 2012-09-21T15:31:21.240 に答える