Лучший способ узнать, какая часть строки - это потенциальное совпадение с RegEx. - PullRequest
1 голос
/ 10 февраля 2011

как бы вы это сделали:

У меня есть строка и несколько регулярных выражений. Затем я выполняю итерацию по строке, и в каждой итерации мне нужно знать, возможно ли, чтобы часть (строковый индекс от 0 до текущего итерированного индекса строки) этой строки могла полностью соответствовать одному или нескольким заданным регулярным выражениям в следующих итерациях.

Спасибо за помощь.

Ответы [ 4 ]

1 голос
/ 10 февраля 2011

А как насчет такого кода:

// all of *greedy* regexs into a list
List<String> regex = new ArrayList<String>();
// here is my text
String mytext = "...";

String tmp = null;
// iterate over letters of my text
for (int i = 0; i < mytext.length(); i++) {
     // substring from 0. position till i. index
     tmp = mytext.substring(0, i);
     // append regex on sub text
     for (String reg : regex ) {
          Pattern p = Pattern.compile(reg);
          Matcher m = p.matcher(tmp);
          // if found, do smt
          if (m.find() ) { bingo.. do smt! }
     }     
}
1 голос
/ 10 февраля 2011

Вы можете использовать Matcher.lookingAt(), чтобы попытаться найти максимально возможное совпадение с заданным входом, но не требовать совпадения всего ввода (.matches() потребует полного ввода для совпадения и .find() не требует начала матча в начале).

0 голосов
/ 11 февраля 2011

Итак, я искал альтернативы стандартной библиотеке Java RegEx и нашел такую, которая хорошо справляется со своей задачей - JRegex

0 голосов
/ 10 февраля 2011

Я не верю, что API регулярных выражений Java обеспечивает такой «инкрементный» или «пошаговый» поиск.

Однако вы могли бы сформулировать свое выражение, используя неохотноквантификаторы .

[...] Однако квантификаторы с неохотой принимают противоположный подход: они начинаются в начале входной строки, а затем неохотно съедают однуперсонаж одновременно ищет совпадение .Последнее, что они пытаются - это вся входная строка.[...]


Если в вашем случае это невозможно, вы можете использовать метод Matcher.setRegion, чтобы постепенно увеличивать используемый регионпо совпадению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...