0

みなさん、こんにちは!:)

ユーザーが文字列をテキストボックスに挿入できるアプリケーションがあります。このテキストボックスは、後でString.Format出力に使用されます。したがって、ユーザーの入力は特定の形式である必要があります。

プレースホルダーを1つだけ置き換えたいので、文字列は「Text{0}Text」のような形式にする必要があります。したがって、少なくとも1つの'{0}'が含まれている必要がありますが、中括弧の間に他のステートメントは含まれていません。たとえば、{1}は含まれていません。

'{0}'の前後のテキストには、任意の文字を使用できます。

したがって、次の制限を尊重する必要があると思います。{は{{、}は}}、 "は\"、\は\として記述する必要があります。

誰かが私にそのような正規表現を書く方法を教えてもらえますか?特に、許可されているすべての文字を一覧表示する代わりに、上記の4つの文字({、}、 "、および\)を除外するために'any character WITHOUT'のようなことを行うことはできますか?

どうもありがとう!!ニッキ:)

4

5 に答える 5

6

私は質問に答えない人になるのは嫌いですが、実際には、String.Format で動作するように入力をフォーマットするようにユーザーに求めるのは使い勝手が悪いです。{0} の前の部分と {0} の後の部分を入力するように、2 つの入力要求を提供します。次に、String.Format を使用する代わりに文字列を連結したい場合があります。ユーザーが指定したテキストで String.Format を使用するのは悪い考えです。

于 2009-10-29T14:02:59.977 に答える
1

あなたの質問は正規表現で答えられると思います:

^(((\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*(\{0\}))+(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])*$

説明:

式は次のように構成されます。

^(allowed chars {0})+(allowed chars)*$

許可された文字の1つ以上のシーケンスの後に、最後にオプションの許可された文字が付いた{0}が続きます。

許可される文字は、前述の4つのシーケンス(\エスケープは\ではなく\\であると想定しました)と、エスケープ文字を含まないすべての文字で構成されます。

(\{\{|\}\}|\\"|\\\\|[^\{\}\"\\])

それらを組み合わせて、私が始めた正規表現を構成します。

于 2009-10-29T14:17:19.603 に答える
1
[^(){}\r\n]+\{0}[^(){}\r\n]+

(、)、{、}、および改行を除くすべてのテキストに一致し、次に に一致{0}し、その後は前と同じです。{0};の前後に少なくとも 1 文字必要です。それを望まない場合は、 に置き換え+*ください。

入力文字列の最初と最後に正規表現を固定することもできます。

^[^(){}\r\n]+\{0}[^(){}\r\n]+$
于 2009-10-29T13:59:52.973 に答える
1

(ティムの答えに似ています)

何かのようなもの:

^[^{}()]*(\{0})[^{}()]*$

http://www.regular-expressions.info/javascriptexample.htmlでテスト済み

于 2009-10-29T14:01:31.440 に答える
1

[^CHARS_GO_HERE]コンストラクトを探しているようです。必要な正確な正規表現は、正規表現エンジンによって異なりますが、[^({})].

Regular-Expressions.info のCharacter Class ページの「Negated Character Classes」セクションを確認してください。

于 2009-10-29T13:49:24.880 に答える