6

"===text=== and ===text===" のような入力文字列があり、wiki 構文を対応する html タグに置き換えたいと考えています。

入力:

===text=== and ===text===

望ましい出力:

<h1>text</h2> and <h1>text</h2>

しかし、次のコードを使用すると、次の出力が得られます。

var regex = new Regex("---(.+)---");
var output = regex.Replace("===text=== and ===text===", "<h1>$1</h1>");

<h1>text=== and ===text</h1>

問題は、正規表現が貪欲に一致することです。しかし、それらを貪欲にしない方法。

ありがとうございます。ダニー

4

5 に答える 5

14

正規表現に疑問符を追加します:===(。+?)===

より良い代替案は、次の形式の正規表現を持つことです:===([^ \ =] +)===。ドットを控えめに使用する方法の説明については、ドット文字に関するこのガイドを参照してください。私が提供した正規表現をベンチマークするとき、それはおよそです。正規表現より50%高速です。

于 2011-03-11T17:05:09.263 に答える
3

正規表現を貪欲にしないために使用しますか?

したがって、式 "===(。+?)==="には2つの一致があります。したがって<h1>text</h1><h1>text</h1>

于 2011-03-11T17:02:03.143 に答える
0

そして、他の人が同じ問題を抱えている場合の情報として、次のようにパターンを拡張する====Text====代わりに、一致を回避するために、次のようにしました。===Text===(?<!=)===([^=]+)===(?!=)

于 2011-03-14T15:57:20.277 に答える
0

別のバリアントを追加します:(===((?:(?!===).)*)===遭遇したときに文字をキャッチするのをやめます===)...ああ...そして、.WiseGuyEhによって提案された問題については、RegexOptions.SingleLineを提案し.て、改行にも一致するようにします。

于 2011-03-11T17:10:36.277 に答える
0

単純に?多分?

===.+?===
于 2011-03-11T17:03:12.037 に答える