2012-01-08 25 views
3

私はこの単純な正規表現を理解するのに苦労しています。私は1対ゼロ期間が続き、最終的にゼロ対多桁の数字で終わる、ゼロから多くの数字としてこれを理解浮動小数点 - 正規表現

[0-9]*\.?[0-9]* 

:私は次の試みを持っています。

私は上記とまったく同じもの以外には一致させたくありません。私は肯定的/否定的なサポートや他の特別なサポートの種類は欲しくない。しかし、なんらかの理由で、上記はランダムな文字のように見えます。何らかの理由で試合のために、以下のすべて:答えで

  • F32
  • 32A
  • = 33

は、私を探しています:

  • 正規表現が機能しない理由の説明。
  • なぜ動作するのかを説明した作業バージョン。

編集:原因のトラブルを引き起こしていると思われるものに、私は私が働いている環境である「QT」タグを追加しました。

編集:混乱のため、私は少しのコードを追加します。

void subclassedQDialog::setupTxtFilters() 
{ 
    QRegExp numbers("^[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?$"); 
    txtToFilter->setValidator(new QRegExpValidator(numbers,this)); 
} 

これは、サブクラス化QDialog内からです:私は、私はどちらかのQTを悪用しています、またはQTに問題があると思うし始めています。 txtToFilterはQLineEditです。誰かが関連性のあるものを提案できる場合は、より多くのコードを提供することができます。上記の表現は元のものではありませんが、それは以下のコメントからのものの1つであり、同じように失敗します。

+0

マッチングテストに使用するコードを表示してください。 – dasblinkenlight

+0

言語?あなたはその番号を一本だけラインに入れたいですか?いくつかの答えはそれを仮定しているようです。 –

+0

私はQTとQRegExpValidator(http://developer.qt.nokia.com/doc/qt-4.8/qregexpvalidator.html)を使用しています。これは問題ではないと期待していました。\ – Serodis

答えて

3

あなたの問題はあなたが\適切にエスケープしていないということです。あなたは\\を置く必要があります。それ以外の場合は、C++コンパイラは\を取り除きます(少なくともgccはこれを警告します)。任意の文字として。

+0

一言、深いので、私は基本を忘れています。私はこれらの表現が混乱していると誓っています。ありがとうございました! – Serodis

+1

正規表現内のバックスラッシュは、文字列の中で文字列としてバックスラッシュを使用する言語で記述すると、本当に混乱します。それは人生の事実です - 誰かが正規表現の中で物事を逃れるためにバックスラッシュを使用するのを避ける正規表現システムを作るまで(しかしそれは起こりそうもありません)。 –

+0

@JonathanLeffler長いライブC#リテラル文字列! – Davor

1

^を先頭に付けて、最後に$と置きます。これは正規表現を文字列の先頭と最後に固定します。

+0

これは真実かもしれませんが(私は分かりませんが)、私の環境は私のためにこれを処理するようですが、違いはありません。 – Serodis

+0

@ Servodおそらく、あなたの環境について私たちに教えるのはいい時です:) – dasblinkenlight

1

あなたの式は、文字列の真ん中に一致するものが見つかります。式の先頭と末尾にアンカーを追加すると、リストの文字列は無視されます。あなたの式は空の文字列と一致しますが、.9999.の文字列に一致することができます。それは少なくとも一つの数字がそれの後に存在する場合にのみ小数点が一致してしまうため

^[0-9]*\.?[0-9]*$ 

より良い選択は

^[0-9]*(\.[0-9]+)?$ 

だろう。

1

*の代わりに+のいずれかが必要です。 「.9」を有効にしますか、先頭に0が必要ですか?

+0

先行する0があるかどうかは気にしません。私は.9と大丈夫です.0.9 – Serodis

+0

これを分割する必要があるかもしれません - 整数の場合とオプションの先行整数を持つ浮動小数点の場合です。 "[0-9] * \。?[0-9] +' " –

+0

の答えについては、http://www.regular-expressions.info/floatingpoint.htmlを参照してください。最初の数値グループをa +。それによって正面の文字が無効になりますが、最初の数字の後には許可されます。 – Serodis

関連する問題