Почему это регулярное выражение соответствует онлайн, но не в моей среде? [Дубликат]

Псевдоэлемент :focus-within позволяет выбрать родителя, если у потомка есть фокус.

Элемент может быть сфокусирован, если он имеет атрибут tabindex.

Поддержка браузера для фокуса внутри

Tabindex

Пример

.click {
  cursor: pointer;
}

.color:focus-within .change {
  color: red;
}

.color:focus-within p {
  outline: 0;
}

I will change color

Click me

3
задан jCoder 4 December 2016 в 01:18
поделиться

4 ответа

Ваш источник s имеет два символа, '\' и 'n', если вы имели в виду, что это будет \, за которым следует разрыв строки, тогда он должен быть "\\\n"

У шаблона два символа '\' и '\n' (разрыв строки) и \ escape-качалка не требуется, поэтому предупреждение. Если вы имели в виду \ следуют разрыву строки, это должно быть "\\\\\n" (дважды \, чтобы избежать его для регулярного выражения, а затем\n).

    String s = "\\\n";
    System.out.println(s);

    Pattern p = Pattern.compile("\\\\\n");

    Matcher mm = p.matcher(s);
    System.out.println(mm.matches());
0
ответ дан Fedor Losev 20 August 2018 в 07:36
поделиться

Поскольку функция "\\n" выполняет обратную косую черту \\ и букву n, а "\\\n" оценивает обратную косую черту \\, а затем новую строку \n.

3
ответ дан Laurel 20 August 2018 в 07:36
поделиться

Обратные косые черты в строковых литералах в исходном коде Java интерпретируются в соответствии с требованиями спецификации Java ™ Language в виде экранов Unicode (раздел 3.3) или других экранов символов (раздел 3.10.6). Поэтому необходимо удвоить обратную косую черту в строковых литералах, которые представляют собой регулярные выражения для защиты их от интерпретации компилятором байт-кода Java. Строковый литерал «\ b», например, соответствует одному символу обратного пробела при интерпретации как регулярное выражение, а «\\b» соответствует границе слова.

См. https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html

0
ответ дан maha lakshmi 20 August 2018 в 07:36
поделиться

s="\\n" означает, что вы назначаете обратную косую черту и n для переменной s, и она содержит последовательность двух символов , \ и n.

Pattern.compile("\\\n") означает, что вы определяете шаблон регулярного выражения \n, который соответствует символу новой строки. Таким образом, этот шаблон не будет соответствовать строке в переменной s.

Предупреждение о избыточном выводе связано с тем фактом, что вы используете тройную обратную косую черту в строковом литерале C: две обратные косые черты определяют буквальную обратную косую черту и третий является избыточным, т. е. существует буквальный \, а затем последовательность escape-последовательности новой строки "\n", а это означает, что буквальная обратная косая черта (определенная с помощью двух обратных косых черт в литерале) является избыточной и может быть удалена.

3
ответ дан Wiktor Stribiżew 20 August 2018 в 07:36
поделиться
  • 1
    \\n в значении \ и n символов. Также \\\n в шаблоне должно означать: \\n, что означает, что он должен соответствовать \ и n. – Raj 4 December 2016 в 03:28
  • 2
    Чтобы соответствовать строке с обратной косой чертой, а затем n, вам нужно String pattern = "\\\\n". Чтобы сопоставить обратную косую черту, вам нужно 4 обратных слэша в строковом литерале, представляющем 2 обратных слэша в строке, переданной движку регулярных выражений. – Wiktor Stribiżew 4 December 2016 в 09:29
  • 3
    Поэтому, пожалуйста, дайте мне знать, если это ответит на ваш вопрос. Если нет, пожалуйста, поделитесь своим кодом или объясните реальный сценарий . – Wiktor Stribiżew 5 December 2016 в 08:40
  • 4
    – Francis Bacon 25 October 2018 в 08:31
Другие вопросы по тегам:

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