1

ここで、正規表現の範囲を超えた課題があります。誰かに提案があれば、それは大歓迎です。このようなものを追跡することはできませんでした。実行可能かどうかはわかりません。私はJavaで次の式を使用しています:

"(?i)-?(([1-9]+[0-9]*)|0)(\\.[0-9]*[1-9]+)?(e-?[0-9]+)?"

長い文字列 (最大 255 文字) を検証して、許可された数値 (計算の種類に関係なく) に少なくとも収まることを確認し、科学的表記法のオプションを許可します。BigDecimal クラスは私が必要とするすべてを行っていなかったので、値は数値の最も単純化された表現に適合し、変更なしで予測可能なプロトコルに従う必要があるため、小数部分の先行ゼロと後続ゼロの追加チェックがあります。以下はすべて、私が期待する結果を返しています。

String allowance = "(?i)-?(([1-9]+[0-9]*)|0)(\\.[0-9]*[1-9]+)?(e-?[0-9]+)?" ;

System.out.println("0".matches(allowance)) ;   // assert true. Confirm default
System.out.println("-42".matches(allowance)) ;   // assert true. Confirm integers only
System.out.println("0.2e543".matches(allowance)) ;   // assert true
System.out.println("1e543".matches(allowance)) ;   // assert true
System.out.println("0.2000e543".matches(allowance)) ;   // assert false : trailing zeros after fractional .2
System.out.println(".2e543".matches(allowance)) ;   // assert false : missing the leading zero
System.out.println("e543".matches(allowance)) ;   // assert false : malformed
System.out.println("0001e543".matches(allowance)) ;   // assert false : leading zeros in the integer
System.out.println("1.0".matches(allowance)) ;   // assert false : easiest match is "1"
System.out.println("0.0".matches(allowance)) ;   // assert false : easiest match is "0"

それはそれでいいのですが、この 2 つを同じ表現で理解することはできません。どちらか一方かもしれませんが、両方ではありません:

System.out.println("-0".matches(allowance)) ;   // Supposed to be FALSE - Should just be "0"
System.out.println("0e543".matches(allowance)) ;   // Supposed to be FALSE - "0" integer rules out the exponent segment so the easiest match would be "0"

セグメント "-?(([1-9]+[0-9] )|0)(\.[0-9] [1-9]+)?"をトラップすることは可能ですか? 2 つの別々の重複するテストとして: 1) "-0" を除外しますが、値に小数値がない場合のみ (つまり、-0.5 が許容されます)、次にジャンプして 2) 次の後続を除外します " e543" 整数値がテストで "0" として返される場合の指数?

4

2 に答える 2

0

これを試すことができます:

"(?i)(0|-?([1-9][0-9]*)(\\.[0-9]*[1-9])?(e-?[1-9][0-9]*)?|-?0\\.[0-9]*[1-9](e-?[1-9][0-9]*)?)"

基本的には、次のいずれかを受け入れます。

  • 符号、小数、または指数のないゼロ
  • オプションの符号、10 進数、または指数を含むゼロ以外の数値
  • 必要な小数とオプションの符号または指数を含むゼロ

これがデモンストレーションです。

于 2013-11-05T23:43:21.380 に答える