0

Regex.Replace を使用してハイパーリンクを作成しようとしています。ユーザーが作成したボタンを押して製品リンクを作成できるようにしたい。このようにして、何らかの理由で URL が変更された場合、データ入力側のロジックを変更する必要はありません。ユーザーはテキストの本文を送信し、次のようなフォーマットになります。

"[!product:123456:Click Me!]" 

ここで、p は製品を表します。Click Me は、リンクに表示されるテキストです。123456 は識別子です。リンクは次のようになります。

<a href="www.mywebsite.com/product/123456">Click Me</a>

これまでのところ、私はこれを持っています:

var output = Regex.Replace(model.Body, @"\[!([^!]*)\!]", "<a href='http://www.mywebsite.com/$1'> link </a>");

どちらが返されますか:

 http://www.mywebsite.com/p:165411:Click Me

[! と !] で区切られたデータを「:」で区切るには?

これが私が考えていることです:

var output = Regex.Replace(model.Body, SOME REGEX HERE, "<a href='http://www.mywebsite.com/$1/$2'> $3 </a>");

うまくいけば、これは私がやろうとしていることに関する十分な情報です. どんな助けでも大歓迎です。

4

1 に答える 1

2

この正規表現はどうですか?

\[!(.*):(.*):(.*)!\]

つまり、C#では

using System;
using System.Text.RegularExpressions;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = "[!product:123456:Click Me!]";
            var regex = new Regex("\\[!(.*):(.*):(.*)!\\]", RegexOptions.IgnoreCase);

            var result = regex.Replace(text, "<a href='http://www.mywebsite.com/$1/$2'> $3 </a>");
            Console.WriteLine(result);
            Console.ReadKey();
        }
    }
}
于 2012-09-24T21:08:38.093 に答える