Regex для сопоставления четырех повторяющихся букв в строке с использованием шаблона Java

Будет разница в привязке переменной scope. Если вы измените obj позже, вы измените возвращаемое значение key2:

var newobj = obj;
obj = { key1: "new" };
alert(newobj.key2());

Теперь он предупреждает «новые работы!», Потому что даже если вы вызываете key2() на исходном объекте (который теперь newobj), ссылка на obj.key1 теперь привязывается к значению нового экземпляра obj. Использование this предотвращает это.

Демо: http://jsfiddle.net/m6CU3/

13
задан Peter Mortensen 5 May 2015 в 19:31
поделиться

4 ответа

Не зная о синтаксисе конечного повторения, ваш собственный навык решения задач должен привести вас к следующему:

([a-z])\1\1\1

Очевидно, что это некрасиво, но:

  • Это работает
  • Это упражняет ваш собственный навык решения задач
  • Это может привести вас к более глубокому пониманию концепций.
    • В данном случае знание десуггерированной формы синтаксиса конечного повторения

Эй, ребята, классные ответы, но у меня есть одна проблема

  • "ffffffff". matches("([a-z])\\\1{3,}") = true
  • "fffffasdf".matches("([a-z])\\\1{3,}") = false
  • "asdffffasdf".matches("([a-z])\\\1{3,}") = false

Что я могу сделать для двух нижних?

Проблема в том, что в Java, matches должны соответствовать всей строке; это как если бы шаблон был окружен ^ и $.

К сожалению, не существует String.containsPattern(String regex), но вы всегда можете использовать трюк с окружением шаблона символами .*:

"asdfffffffffasf".matches(".*([a-z])\\1{3,}.*") // true!
//                         ^^              ^^
17
ответ дан 1 December 2019 в 17:47
поделиться

Общий шаблон регулярного выражения для предопределенного повторения - {4} .

Таким образом, здесь ([a-z]) \ 1 {3} должно соответствовать вашим 4 символам.

3
ответ дан 1 December 2019 в 17:47
поделиться

Вы хотите сопоставить один символ, а затем этот символ повторить еще три раза:

([a-z])\1{3}

Примечание. В Java вам нужно избегать обратной косой черты внутри обычного выражения.


Обновление . Причина, по которой он не выполняет то, что вы хотите, заключается в том, что вы используете метод соответствует , который требует, чтобы строка точно соответствовала регулярному выражению, а не просто содержала регулярное выражение. Вместо этого для проверки на сдерживание следует использовать класс Matcher . Вот пример кода:

import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Program
{
    public static void main(String[] args)
    {
        Pattern pattern = Pattern.compile("([a-z])\\1{3}");
        Matcher matcher = pattern.matcher("asdffffffasdf");
        System.out.println(matcher.find());
    }
}

Результат:

true
21
ответ дан 1 December 2019 в 17:47
поделиться

Вы можете поместить {n} после того, как что-то соответствует ему n раз, так:

([a-z])\1{3}
6
ответ дан 1 December 2019 в 17:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: