正規表現の一致を配列として取得する
Java では、指定されたパターンが特定の文字列に一致するかどうかを判断するのは簡単です。ただし、複数の一致を処理する場合、それらを配列に収集するのは困難な場合があります。これに対処するには、このガイドを詳しく調べて、正規表現一致を効果的に利用する方法を見つけてください。
反復アプローチ
一致を配列に蓄積するには、Matcher とString:
import java.util.regex.Matcher; import java.util.regex.Pattern; ... List<String> allMatches = new ArrayList<>(); Matcher m = Pattern.compile("your regular expression here") .matcher(yourStringHere); while (m.find()) { allMatches.add(m.group()); }
このコードは、入力内で一致する部分文字列を体系的に検索する Matcher オブジェクトを確立します。 弦。成功した各一致は allMatches リストに追加されます。最後に、allMatches.toArray(new String[0]):
String[] matchesArr = allMatches.toArray(new String[0]);
Lazier Matches 用の Custom Iterable
を使用して配列に変換します。あるいは、不必要な処理を行わずに一致をトラバースして即座に消費する遅延イテレータ処理:
public static Iterable<MatchResult> allMatches( final Pattern p, final CharSequence input) { return new Iterable<MatchResult>() { public Iterator<MatchResult> iterator() { return new Iterator<MatchResult>() { // Internal Matcher final Matcher matcher = p.matcher(input); // Lazy-filled MatchResult MatchResult pending; public boolean hasNext() { if (pending == null && matcher.find()) { pending = matcher.toMatchResult(); } return pending != null; } public MatchResult next() { if (!hasNext()) { throw new NoSuchElementException(); } MatchResult next = pending; pending = null; return next; } public void remove() { throw new UnsupportedOperationException(); } }; } }; }
次のように使用します:
for (MatchResult match : allMatches( Pattern.compile("[abc]"), "abracadabra")) { System.out.println(match.group() + " at " + match.start()); }
以上がJava ですべての正規表現一致を配列として効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。