これを行う正規表現を作成できます。
// pattern1 and pattern2 are String objects
String regexString = Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2);
これはpattern1
andpattern2
をリテラルテキストとして扱い、パターン間のテキストは最初のキャプチャ グループにキャプチャされます。Pattern.quote()
正規表現を使用したい場合は削除できますが、削除した場合の保証はありません。
にフラグを追加することで、一致の発生方法をカスタマイズできますregexString
。
- Unicode 対応の大文字と小文字を区別しない一致が必要な場合
(?iu)
は、 の先頭に追加するregexString
か、メソッドPattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
にフラグを指定しPattern.compile
ます。
- 2 つの区切り文字列が複数の行にまたがって表示される場合でもコンテンツをキャプチャしたい場合は、
(?s)
前に を追加するか(.*?)
、メソッドにフラグを指定します。"(?s)(.*?)"
Pattern.DOTALL
Pattern.compile
次に、正規表現をコンパイルし、オブジェクトを取得Matcher
し、一致を反復処理して、それらを a List
(または any Collection
、それはあなた次第です) に保存します。
Pattern pattern = Pattern.compile(regexString);
// text contains the full text that you want to extract data
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String textInBetween = matcher.group(1); // Since (.*?) is capturing group 1
// You can insert match into a List/Collection here
}
テスト コード:
String pattern1 = "hgb";
String pattern2 = "|";
String text = "sdfjsdkhfkjsdf hgb sdjfkhsdkfsdf |sdfjksdhfjksd sdf sdkjfhsdkf | sdkjfh hgb sdkjfdshfks|";
Pattern p = Pattern.compile(Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2));
Matcher m = p.matcher(text);
while (m.find()) {
System.out.println(m.group(1));
}
foo
上記の方法でbar
この入力の間のテキストを検索するfoo text foo text bar text bar
と、1 つの一致が得られることに注意してください text foo text
。