1

式を検証するために正規表現を使用しています(Excelのような)。これらの数式には、文字列 (引用符の間)、セル参照 (C[] プレースホルダー --> C[A4] で示される)、または整数値を含めることができます。それらは「&」文字で連結されます。有効な数式の例を次に示します。

  • =C[A4]+C[B4]
  • ="これはテキストで、この整数値のように好きなものを入力できます: "&123456789
  • ="開始"&(C[A4]+C[A3])/2&123&"終了"

これは私が使用している正規表現です:

^-?(\d+)|(C\[[A-Z][0-9]\])([-\+\*\/][\(]*-?((\d+)|(C\[[A-Z][0-9]\]))[\)]*)*$

今までは、やるべきことをやってきた。また、数式として検証できない入力を引用符で囲むオートコレクトもあります。だから入ったら

=200X-8

「=」の後のコンテンツを引用符で囲む必要があります。しかし、これは起こりません。私の regex.IsMatch は成功しているようですが、正規表現によると X を許可していません。「200」に一致するようで、それ以上はありません。奇妙なことに、入力全体を検証するように指示していることです (正規表現の末尾にある "$" を参照してください)。

何か不足していますか (正規表現は正しいと思います)、完全な入力と一致しない場合に regex.Ismatch を「成功」させたくありません。

4

1 に答える 1

2

正規表現メタ文字|の優先順位は最も低くなります。結果として:

^r1|r2$

r1で始まる文字列またはr2で終わる文字列に一致することを意味します。

あるいは

^(r1|r2)$

r1またはr2で開始および終了する文字列に一致することを意味します。

既存の正規表現は上記のタイプ1に似ており、その結果、200入力が一致しています。これを修正するには、(...)上記のタイプ2で行ったように正規表現をaで囲みます。

于 2012-07-17T13:31:20.597 に答える