0

告白しなければなりません。正規表現を書くことに関してはかなり役に立たないのですが、現在、私を本当に混乱させる問題があります。

文字列(サイズ22K)を入力として受け取り、その上で単一の正規表現を実行してLong値を探す関数を作成しました。長い値が見つかった場合は、ハッシュマップの文字列値に置き換えられます。

ただし、文字列内で値が欠落し続けます。私が書いた正規表現は次のとおりです。

Pattern.compile("[*]{3}[0-9]{1,}[*]{3}");

ファイルで検索しているlong値は、次のようにフォーマットされています。

***nnnnnnnnnnnnnnnn***

これで正規表現は機能しているように見えますが、私が言ったように、たとえば次のようないくつかの値が欠落しています。

***1407374883553285*** - FOUND
***281474976720057*** - NOT FOUND

値が欠落している理由については非常に混乱しています。単純なwhileループを使用して検索を実行し、matcher.find()いつ一致するかを調べています。

正規表現が十分に厳密でないか、入力文字列でのデータの構造が原因で値が欠落していると想定しています。

誰かアドバイスをいただければ幸いです。

ありがとう

4

2 に答える 2

1

よりクリーンな正規表現は[*]{3}\d+[*]{3}です。それがどうなるかを確認するには、以下と照合してください。

final Pattern pattern = Pattern.compile("[*]{3}\\d+[*]{3}");
final Matcher matcher = pattern.matcher("inputfile");
while (matcher.find())
{
  System.out.println(matcher.group());
}
于 2013-02-12T14:31:46.550 に答える
-1

java.util.regex.Pattern.matches(String regEx, CharSequence input)規則的な表現で「[*]{3}[0-9]*[*]{3}」として使用できます

于 2013-02-12T14:38:47.927 に答える