先行ゼロを無視して、長い文字列から存在する場合は最初の10桁を抽出することに興味があります。さらに、ゼロしかない場合は1つのゼロのみを返し、数値がない場合は空の文字列を返します。一つに合わせたいfind
です。
例えば:
"abcd00111.g2012asd"
に一致する必要があります"1112012"
"aktr0011122222222222ddd"
に一致する必要があります"1112222222"
"asdas000000asdasds0000"
に一致する必要があります"0"
"adsads.cxzv.;asdasd"
に一致する必要があります""
これが私がこれまでに試したことです:IdeoneDemo-コード
Pattern p = Pattern.compile("[1-9]{1}+[0-9]{9}");
Matcher m = p.matcher(str);
if (m.find()) {
String match = m.group();
System.out.println(match);
}
問題は、この正規表現には最初の非ゼロの後に9桁の連続した数字が必要であり、任意の9桁(間にある可能性のある非数字文字)が必要なことです。
単一の実行で一致を見つけたいので、if (m.find())
代わりに私が持っているコードに注意してください。while (m.find())
アップデート
コメントに基づいて、正規表現では1回の実行では実行できないことを理解しました。
答えは正規表現ベースである必要はありませんが、このメソッドを何度も実行するので最も効率的です。