0

どんなボディでも、次のようなサンプル文字列からバージョン番号(1.5)を抽出する正規表現パターンを教えてもらえますか?

    "jdk1.5","jdk-v1.5","jdk-V1.5","jdk V1.5","jdkv1.5","jdk version1.5","1.5.6","v1.5","V1.5","version 1.5","Version 1.5","14.5.4","1.5.4","14.5.4""jdj14.5"

正規表現パターンを文字列配列に格納したいので、これらのパターンを上記の文字列でチェックします。保存されているパターンのいずれかと一致する場合、出力はバージョン番号1.5である必要があります。上記の文字列からのみバージョン番号(1.5)を抽出したい。

有効な文字列形式: "jdk1.5"、 "jdk-v1.5"、 "jdk-V1.5"、 "jdk V1.3"、 "jdkv1.4"、 "jdk version1.5"、 "1.5.6 "、" v1.5 "、" V1.5 "、" version 1.5 "、" Version 1.5 "、" 14.5.4 "、" 1.5.4 "、" 14.5.4 "" jdj14.5 "、"14.52。 3.42 "

無効な文字列形式: "jdk1..2"、 "jdk.1.2。"、".1.2。"

4

7 に答える 7

2

試してみてください:

^(jdk[- ]?)?([vV](ersion)? ?)?\d\.\d(\.\d)?$

フラグを設定する[vV]と省略できます。vCASE_INSENSITIVE

于 2012-08-24T10:45:46.057 に答える
1

(?<![\d.])(\d+[.])+(\d+)(?![\d.])

これをチェックして...

フォームの文字列と一致します

number.number.number.number

ドットの後にまたは前にない

于 2012-08-27T06:15:16.003 に答える
1

要件

あなたが望むものを定式化できる場合:

  1. 1.5or1.5.6または1.5.6.7orなどの形式1.5.6.7.8のものはすべてデフォルトで有効なバージョン番号です(番号はのように1桁以上にすることができます12.60.70)。
  2. バージョン番号の1.5後にドット(.)を付けることができるのは、それがの形式である場合のみです1.5.6
  3. 1.5のようなドット(.)が前に付くことのないバージョン番号.1.5

解決

次に、この正規表現を提案できます。

(?!\.)(\d+(\.\d+)+)(?![\d\.])

実際の動作を確認し、すべての正のサンプルを含め、提供したすべての負のサンプルを除外します。

使い方

最初のキャプチャグループがバージョン番号になります。サンプルコード:

Pattern pattern    = Pattern.compile("(?!\\.)(\\d+(\\.\\d+)+)(?![\\d\\.])");
Matcher matcher    = pattern.matcher(inputStr);
boolean matchFound = matcher.find();

if (matchFound)
{
    String version = matcher.group(1);
    System.out.println("Version number: " + version);
}
else
{
    System.out.println("No match for the input!");
}

注:先読みは古いバージョンではサポートされていないため、これはJava7以降でのみ機能します。

于 2012-08-24T11:10:28.917 に答える
1

この正規表現を試してください:

(?<=([\w\s]))(\d)\.(\d)(.\d)?

これはすべての有効な形式と一致し、無効な形式とは一致しません。

ここで動作することを確認してください:http://regexr.com?31ubc

誰かが私をより良くするのを手伝ってくれるなら、そしてそれをどのように一致させるのかについても感謝します1.5.6

于 2012-08-24T10:56:31.620 に答える
0

1.5.6のような文字列の場合は、次を使用できます: [0-9](.[0-9])+ http ://regexr.com?31ubo

于 2012-08-24T11:18:59.403 に答える
0

正規表現を使用します。

(^([jJ][dD][kK])([\s]*[vV]*\d+.\d+(.\d+)*))$

これはあなたの日を作るでしょう:)

于 2012-08-27T06:48:03.797 に答える
-1

「1.5.6」や「1.5.0」のように2つ以上の数字をキャッチしたい場合は、

[0-9](.[0-9])+

または、最初の2桁だけが必要 である[0-9].[0-9]が、これが1.5.0.0のような文字列では機能しない場合は、1.5と0.0をキャッチします。

于 2012-08-24T10:46:02.280 に答える