3

サイトにウィキリンクに似たものを実装する必要があります。ユーザーはプレーンテキストを入力しており、内部リンクがある場合は常に [[asdf]] と入力します。最初の 5 つの例だけが、私が必要とする実装に実際に適用できます。

正規表現を使用しますか?どの式でこれを行いますか? C# で既にこれを行っているライブラリはありますか?

4

3 に答える 3

2

純粋な正規表現側では、式は次のようになります。

\[\[([^\]\|\r\n]+?)\|([^\]\|\r\n]+?)\]\]([^\] ]\S*)
\[\[([^\]\|\r\n]+?)\]\]([^\] ]\S*)

(.+?) Davidの提案を に置き換えることで([^\]\|\r\n]+?)、角かっこや改行文字を閉じることなく、正当な wiki リンクのテキストのみを確実にキャプチャできます。

([^\] ]\S+)最後に、wiki リンク式の後に閉じ角かっこが続かないことを確認します。

この種の検出を既に実装している C# ライブラリがあるかどうかは確かです。

ただし、この種の検出を regexp で本当に完全に証明するには、ここに示すように、C# regexp エンジンにあるプッシュダウン オートマトンを使用する必要があります。

于 2009-01-26T07:29:19.073 に答える
1

これを行うための既存のライブラリがあるかどうかはわかりませんが、それが私だったら、おそらく正規表現を使用するでしょう:

  • 一致\[\[(.+?)\|(.+?)\]\](\S+)して置換する<a href="\2">\1\3</a>
  • 一致\[\[(.+?)\]\](\S+)して置換する<a href="\1">\1\2</a>

とにかく、そのようなもの。

于 2009-01-26T06:13:59.273 に答える
1

これは古い質問であり、すでに回答されていますが、これを他の誰かの補遺として追加すると思いました。既存の2つの回答はすべての実際の作業を行い、90%そこに到達しましたが、コードを探している人が試してまっすぐに進むための最後のビットは次のとおりです。

string html = "Some text with a wiki style [[page2.html|link]]";
html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\|([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$2$3</a>");
html = Regex.Replace(html, @"\[\[([^\]\|\r\n]+?)\]\]([^\] ]\S*)", @"<a href=""$1"">$1$2</a>");

実際の正規表現への唯一の変更点は、元の回答では交換部品が間違った方法であったため、href が表示テキストに設定され、リンクがページに表示されたことです。したがって、私はそれらを交換しました。

于 2016-06-03T14:17:54.987 に答える