2012-02-25 6 views
1

私は、おそらく+若しくはによって先行ない 介在シンボルと符号付きおよび符号なし整数定数を返すことができる必要があります。唯一許さ数字は、私は式が整数の前または後にピリオドを含んではならないと言うする方法を把握することはできません3、4、および5Java RegEx - "。"を含まない整数の場合 -

です。

これは私がこれまで持っているものですが、私は合格した場合は、「34.5から43」と言う文字列が返さは次のようになります。「34 5 43」。戻す必要がある

すべてが「43」です。

public String getInts(String toBeScanned){ 

    String INT = ""; 
    Pattern p = Pattern.compile("\\b[+-]?[3-5]+\\b"); 
    Matcher m = p.matcher(toBeScanned); 

    if (m.matches() == true){ 
     INT = toBeScanned; 
    } 
    else{ 
     m = p.matcher(" " + toBeScanned); 
     while (m.find()){ 
     INT = INT + m.group() + " "; 
     } 
    } 
    return INT; 
} 

正しい方向への思考やプッシュは高く評価されます。最初と最後の文字ができることそれを言うする方法がある[B \としない。]これが私のうちの一体をイライラさせられる

。助けて!

+0

"\\ b?(?:([+ - ]?[3-5。] +)?)+ \ b?"マッチャーの最後のグループを取得しますか? –

+0

実際には、 '\ b'はJavaパターンの中で単語境界***として壊れています。***あなたが**使用しているのは、Javaのネイティブ文字セットではなく7ビット文字だけです**その他**あなたは[ Java 7 Pattern.UNICODE_CHARACTER_CLASS](http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#UNICODE_CHARACTER_CLASS)コンパイルオプションまたは同等の埋込み '"(?U) "'フラグ。したがって、7ビットのデータを持っていることを確認するか、新しいフラグを使用するか、そうでなければ '\ b'を使用しないでください。 – tchrist

答えて

2

あなたはワード境界\bここではしたくありません。私は最高のこの

(?<![.\d])[+-]?[3-5]+(?![.\d]) 

here on Regexr

(?<![.\d])はパターンがドットと不可の数字ではありません前に、それが言う、負の後読みアサーションでそれを参照してくださいしてみてください、あなた自身の主張を作成することだと思います。

(?![.\d])が負の先読みアサーションで、それはパターンがドットと不可の数字ではありません後に述べています。

改善

それは "hf34" のようなものと一致することを避けるために、我々はそれがより厳格な

(?<![.\w])[+-]?[3-5]+(?![.\w]) 

it on Regexr

を参照してくださいワード境界にすることができ\b

\bは、単語文字から非単語文字への変更に一致します。単語の文字は、文字または数字または_です。つまり、[+-]の前に\bの問題が発生することを意味します。これは、文字列のスペース/開始と[+-]の間に\bが存在しないためです。

+0

問題は(?<![。\ d])はドットも数字も許可されていませんが、それ以外は何もないので、 "hf35 43"が渡された場合、返される文字列は "35 43" 「43」だけを返す必要があります。 – Ethan

+1

それから '\ d'を' \ w'に変更します。 '(?<![。\ w])[+ - ]?[3-5] +(?![。\ w])'。 – stema

+0

あなたは、天才です。これは美しく動作します。 Regexrは素敵なツールです。私に見せてくれてありがとう。私は決してそれを考え出していないだろう。 – Ethan

0

"\ bの[+ - ]?[。] [3-5] + [3-5] +の\ bの"

このパターンが一致するためには、少なくとも一つの番号がなければならないと述べています前に、そして小数点の後に1つの数字。

+0

それはまさに私がしたくないことです。 "。"がある場合その番号の前または後に無視する必要があります。 – Ethan

0

最初と最後の文字ができることそれを言うする方法がある[Bとされていません\は。]

[^\.\b] 

マッチBではなく、\ ''

これはあなたが探しているものですか?

[^\.\b][+-]?[3-5]+[^\.\b] 

は '43' と一致しますが、ない'34 0.5'

+0

[^ \。\ b]は^ \とすることができます。または\ b。だからこれはうまくいきません。私はすでにそれを笑った。 – Ethan

+0

'[\ b]'はどういう意味ですか?境界はゼロ幅アサーションであるため、charクラスでは使用できません。あなたはバックスペースを信じますか? – tchrist

関連する問題