Жадный режим:
Индикатор количества по умолчанию в режим жадности, если не указано иное. Выражения жадных узоров будут продолжать соответствовать, пока они не смогут. Если вы обнаружите, что результат соответствия выражения не соответствует ожидаемому, вполне вероятно, что это потому, что - вы думаете, что выражение будет соответствовать только первым нескольким символам, но на самом деле это жадный шаблон, поэтому оно будет продолжать соответствовать.
Жадность и не-зеленые, плюс? не-зеленых:
var s = '1023000'.match (/(/d+) (0*)/); s ["1023000", "1023000", ""] var s =' 1023000'.match (/^(/d+) (0*) $/); s ["1023000", "1023000", "] var s =); '1023000'.match (/^(/d+?) (0*) $/); s ["10", "1", "0"]
Регулярные выражения Java используют жадный жадный шаблон сопоставления по умолчанию. Это самое длинное совпадение такого типа (.*). Если требуется кратчайший матч, он будет изменен на (.*?) То есть, это едва совпадающий шаблон.
Принцип анализа:
Если это жадный схема сопоставления, двигатель регулярного выражения будет соответствовать до конца строки. Когда матч неверно, он будет обратно и найдет последнюю подходящую позицию, чтобы вернуть соответствующий результат. Если это едва совпадающий шаблон, регулярный механизм выражения будет соответствовать символу в конце шаблона, а затем сделает шаг назад, обнаружите, что совпадение является ложным, а затем отслеживайте обратно в положение, где самый последний матч, найденный в запасной, верно, возвращая результат.
Посмотрите на код:
Пример 1:
public void test51 () {string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println (str); str = str.replaceall ("/"(.*)/" ","@"); System.out.println (str); } Выход:
aaa "bb" cc "ddd" eeeaaa@eee
Пример 2:
@Test public void test52 () {string str = "aaa/" bbb/"ccc/" dd/"eee"; System.out.println (str); str = str.replaceall ("/"(.*?)/" ","@"); System.out.println (str); } Выход:
aaa "bb" cc "ddd" eeeaaa@ccc@eee