Как использовать регулярные выражения в этом случае?

avatar
jiangke
8 апреля 2018 в 00:23
43
1
1

Строка: "LinksImagesListCodeHt1233ddmlImagesConsider112dd2Download", я хочу получить "ImagesConsider112dd2Download". поэтому я использовал это выражение «Images.*? Download». Но оно соответствует «ImagesListCodeHt1233ddmlImagesConsider112dd2Download». Каким должно быть правильное выражение?

Временно есть уродливый способ решить эту проблему:

Pattern p = Pattern.compile(StringUtils.reverse("Download")+ ".*?" + StringUtils.reverse("Images") );
String s = "LinksImagesListCodeHt1233ddmlImagesConsider112dd2Download";
s = StringUtils.reverse(s);
Matcher m = p.matcher(s);
while (m.find()){
    m.end();
    System.out.println(StringUtils.reverse(m.group()));
}
Источник
Moti Korets
8 апреля 2018 в 01:16
0

Пожалуйста, приведите еще несколько примеров того, что вам нужно. Или объясните общий случай, вы можете использовать положительный просмотр назад (?=>ddml), но, конечно, это решит только один случай, который вы предоставили.

Paul G Mihai
8 апреля 2018 в 01:17
0

Пробовали ли вы использовать * ungreedy вот так: Images.* Download это должно соответствовать обоим вхождениям или сделать его более конкретным, например: ImagesConsider.* Download

Ответы (1)

avatar
Moti Korets
8 апреля 2018 в 01:28
0

Чтобы сопоставить текст между Images и Download, который не содержит слова Images внутри, вы можете использовать отрицательный поиск, подобный этому

Images((?!Images).)*Download

Объяснение
Images - Match символьная строка Images
(?!Images). - Совпадение символ, который не следует Images слово
((?!Images).)* - Совпадение ноль или более раз