2016-04-27 34 views
0

正規表現が初めてです。私はNUMBER(19, 4)を検索したいが、このメソッドは値(この場合は19,4)を返さなければならない。しかし、私は結果として常に0を得る!正規表現構文解析Double

 int length =0; 
     length = patternLength(datatype,"^NUMBER\\((\\d+)\\,\\s*\\)$","NUMBER"); 

    private static double patternLengthD(String datatype, String patternString, String startsWith) { 
     double length=0; 
     if (datatype.startsWith(startsWith)) { 
      Pattern patternA = Pattern.compile(patternString); 
      Matcher matcherA = patternA.matcher(datatype); 
       if (matcherA.find()) { 
        length = Double.parseDouble(matcherA.group(1)); 
      } 
     } 
     return length; 
    } 
+0

あなたのパターンは「NUMBER」に続いて '('、数字の後にカンマ、スペースが続きますが、カンマの後ろに空白でないものがあればマッチさせようとしています – RealSkeptic

答えて

2

コンマの後に数字の一致がありません。
,もエスケープする必要はありません。 これを使用します。

"^NUMBER\\((\\d+),\\s*(\\d+)\\)$" 

は、これは、あなたgroup(1)の最初の数とgroup(2)で二番目の数字を与えます。

あなたがこれを使用することにより" NUMBER (19 , 4) "のような値に、より寛大と一致することができますので、それは、スペース上がかなり厳格である:その場合は

"^\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)\\s*$" 

あなたstartsWithをドロップしなければならないとだけ使用します正規表現を直接。また、find()matches()に変更すると、アンカー(^$)を削除できます。

通常、NUMBER(19)も許可されています。二番目の数字が与えられていない場合

"\\s*NUMBER\\s*\\(\\s*(\\d+)\\s*(?:,\\s*(\\d+)\\s*)?\\)\\s*" 

group(2)その後、nullを返します。オプションの2番目の値を作ることができます。

regex101 for demoを参照してください。


コードはコンパイルされません。
あなたのメソッドはdoubleを返しますが、lengthintです。

19,4は浮動小数点数のように見えますが、そうではありません。
2つの値を別々に保存する必要があります。

+0

regex101 .comウェブサイト!これは大きな助けになります! – Hammelkeule

関連する問題