Если принятый ответ не подходит для вас, вы можете попробовать.
str.replace(new RegExp('\n','g'), '<br />')
Это сработало для меня.
Сделайте попытку сопряжения начать свое следующее сканирование с последнего \d+
.
Matcher m = Pattern.compile("\\d+\\D+(\\d+)").matcher("2abc3abc4abc5");
if (m.find()) {
do {
allMatches.add(m.group());
} while (m.find(m.start(1)));
}
Не уверен, что это возможно на Java, но в PCRE вы можете сделать следующее: (?=(\d+\D+\d+)).
Объяснение Метод состоит в том, чтобы использовать соответствующую группу в виде, а затем «есть» символа для перемещения вперед
(?=
: начало положительного обзора (
: начало сопоставления группы 1 \d+
: совпадение с цифрой один или несколько раз \D+
: совпадение с не- (f7): конец группы 1 )
: конец обзора .
: конец символа один или несколько раз \d+
: совпадение с цифрой один или несколько раз )
: конец группы 1 Благодаря Казимир и Ипполит он действительно работает на Java. Вам просто нужно добавить обратную косую черту и отобразить первую группу захвата: (?=(\\d+\\D+\\d+)).
. Протестировано на www.regexplanet.com :
[/g3]
12abc13abc14abc15
как вход, а результат - [12abc13, 2abc13, 13abc14, 3abc14, 14abc15, 4abc15]
вместо [12abc13, 13abc14, 14abc15]
. См. Комментарии к моему и OP в вопросе.
– johnchen902
31 July 2013 в 14:44
(?=((?<!\\d)\\d+\\D+\\d+))
, если вы не хотите, чтобы накладываемые результаты совпадали с вашими совпадающими результатами. :)
– Casimir et Hippolyte
31 July 2013 в 14:52
Вышеупомянутое решение HamZa отлично работает на Java. Если вы хотите найти конкретный шаблон в тексте, все, что вам нужно сделать, это:
String regex = "\d+\D+\d+";
String updatedRegex = "(?=(" + regex + ")).";
Если regex
- это шаблон, который вы ищете и который должен быть перекрыт, вам необходимо окружить его (?=(" at the start and ")).
в конце.
IllegalStateException
. – johnchen902 31 July 2013 в 14:34