Вы можете создать регулярное выражение, чтобы сделать это для вас:
// pattern1 and pattern2 are String objects
String regexString = Pattern.quote(pattern1) + "(.*?)" + Pattern.quote(pattern2);
Это будет обрабатывать pattern1
и pattern2
как литералы, а текст между шаблонами будет записан в первая группа захвата . Вы можете удалить Pattern.quote()
, если хотите использовать регулярное выражение, но я ничего не гарантирую, если вы это сделаете.
Вы можете добавить некоторую настройку того, как должно происходить совпадение добавив флаги к regexString
.
(?iu)
в начале regexString
или поставьте флаг Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE
на Pattern.compile
. (?s)
до (.*?)
, то есть "(?s)(.*?)"
, или поставьте флаг Pattern.DOTALL
в Pattern.compile
. Затем скомпилируйте регулярное выражение, получите Matcher
, проведите по спичкам и сохраните их в List
(или любой 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
с помощью метода выше, вы получите одно совпадение, которое равно text foo text
.