2

私はJavaが初めてです。文字列をそのようなパターンと一致させるには、正規表現が必要です。

[0-9].[0-9].[0-9]

たとえば、正規表現は5.5.0or4.6.5またはに厳密に一致する必要があり5.2.2ます。

上記のパターンは、次のような135.9.0出力を与える文字列に一致します5.9.0

しかし、私はそのようなパターンに合わせたくありません。

ピリオド (.) 記号で区切られた 3 桁の数字を正確に一致させる必要があります。

4

5 に答える 5

3

.正規表現のメタ文字と同様に、のようにエスケープします\.。したがって、式、

[0-9]\.[0-9]\.[0-9]

これは次のように簡略化できます

\d\.\d\.\d

またはにさえ

(\d\.){2}\d

これは、で区切られた任意の3桁に一致します.

5.9.0から抽出する"string 5.9.0"場合は、上記の正規表現を使用することにも注意してください。5.9.0ただし、正確に"5.9.0"(文字列全体、ある種の検証で使用される)一致させたい場合^は、最初と$最後に使用する必要があります。だからそれは次のようなものになります

^(\d\.){2}\d$

最後に(あなたの質問はあなたが一桁または数字のシーケンスを一致させたいかどうかはかなり不明確なので)、[0-9]+代わりに[0-9]または\d+代わりに数字のシーケンスを一致させるために使用し\dます。

于 2012-10-11T07:33:46.713 に答える
1

This regular expression will do

\b\d\.\d\.\d\b

\d matches a digit i.e 0-9

. need to be escaped with \ else it would match any character

于 2012-10-11T07:36:24.127 に答える
1

Below Regex will do what you want: -

\b\d+\.\d+\.\d+\b
  • \d matches any digit.

If you just want to match single digit separated by . you can use: -

\b\d\.\d\.\d\b
  • \b is for boundary checking..

Try this code: -

String str = "5.0.0 abc 5.6.7 abc 12.45.65 From: 133.5.0<pos1.002otak.com>";

Pattern pattern = Pattern.compile("\\b\\d\\.\\d\\.\\d\\b"); 
Matcher match = pattern.matcher(str);

while (match.find()) {
    System.out.println(match.group(0));
}

OUTPUT

5.0.0
5.6.7
// 12.45.65 is not printed

UPDATE: -

To match 1.4.5 inside abc1.4.5def and not in 121.4.546 use the below pattern: -

[^\\d](\\d\\.\\d\\.\\d)[^\\d]
于 2012-10-11T07:37:11.743 に答える
1

You can use either:

^\d\.\d.\d$

Or

\b\d\.\d.\d\b
于 2012-10-11T07:37:42.523 に答える
1

ドットは正規表現のすべての文字に一致するため、バックスラッシュでドットをエスケープする必要があります。
正規表現の先頭にキャレット (^) を追加し、正規表現の末尾にドル記号を追加して、一致を文字列の一部ではなく文字列全体に制限する必要があります (文字列に不要なものが含まれている場合に一致する可能性があります)。

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

または、定義済みの接頭辞/接尾辞、または先頭にある数字以外を使用して一致させます(これは、文字列の先頭に数字以外のものが含まれている場合にのみ、そうでない場合は上記を使用します):

[^0-9]
于 2012-10-11T07:34:08.867 に答える