1.4.5
以下の string のように、特定の文字列に一致する正規表現が必要です。私の文字列は次のようになります
absdfsdfsdfc1.4.5kdecsdfsdff
出力として与える正規表現があり[c1.4.5k]
ます。しかし、私は一致したいだけ1.4.5
です。私はこのパターンを試しました:
[^\\W](\\d\\.\\d\\.\\d)[^\\d]
しかし、運がありません。私はJavaを使用しています。パターンを教えてください。
私があなたの式[^\\W](\\d\\.\\d\\.\\d)[^\\d]
を正しく読むと、数字の前ではなく単語の文字が前に必要になります。あれは正しいですか?
そのために、後読みアサーションと先読みアサーションを使用できます。これらのアサーションは条件をチェックするだけですが、一致しないため、その内容は結果に含まれません。
(?<=\\w)(\\d\\.\\d\\.\\d)(?!\\d)
そのため、キャプチャ グループを削除できます。また、パターンで自分自身を繰り返しています。これも単純化できます。
(?<=\\w)\\d(?:\\.\\d){2}(?!\\d)
それが私のパターンになります。(これ?:
は非キャプチャ グループです)
要件はあいまいです。一連の正確に3つの数字を正確に2つのドットと一致させる必要がありますか?
[0-9]+\.[0-9]+\.[0-9]+
これは次のように書くことができます
([0-9]+\.){2}[0-9]+
間にx-1ドットで区切られた、数のx個のケースを一致させる必要がありますか?
([0-9]+\.)+[0-9]+
ルックアヘッドとルックバックを使用します。
(?<=c)[\d\.]+(?=k)
c は 1.4.5 の直前の文字で、k は 1.4.5 の直後の文字です。c と k は、目的に合った正規表現に置き換えることができます
String str= "absdfsdfsdfc**1.4.5**kdec456456.567sdfsdff22.33.55ffkidhfuh122.33.44";
String regex ="[0-9]{1}\\.[0-9]{1}\\.[0-9]{1}";
Matcher matcher = Pattern.compile( regex ).matcher( str);
if (matcher.find())
{
String year = matcher.group(0);
System.out.println(year);
}
else
{
System.out.println("no match found");
}
私はこれがそれを行うべきだと思います:([0-9]+\\.?)+
正規表現
((?<!\d)\d(?:\.\d(?!\d))+)
Java 文字列として:
"((?<!\\d)\\d(?:\\.\\d(?!\\d))+)"