Псевдоэлемент :focus-within
позволяет выбрать родителя, если у потомка есть фокус.
Элемент может быть сфокусирован, если он имеет атрибут tabindex
.
Поддержка браузера для фокуса внутри
Пример
.click {
cursor: pointer;
}
.color:focus-within .change {
color: red;
}
.color:focus-within p {
outline: 0;
}
I will change color
Click me
Ваш источник 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());
Поскольку функция "\\n"
выполняет обратную косую черту \\
и букву n
, а "\\\n"
оценивает обратную косую черту \\
, а затем новую строку \n
.
Обратные косые черты в строковых литералах в исходном коде 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
s="\\n"
означает, что вы назначаете обратную косую черту и n
для переменной s
, и она содержит последовательность двух символов , \
и n
.
Pattern.compile("\\\n")
означает, что вы определяете шаблон регулярного выражения \n
, который соответствует символу новой строки. Таким образом, этот шаблон не будет соответствовать строке в переменной s
.
Предупреждение о избыточном выводе связано с тем фактом, что вы используете тройную обратную косую черту в строковом литерале C: две обратные косые черты определяют буквальную обратную косую черту и третий является избыточным, т. е. существует буквальный \
, а затем последовательность escape-последовательности новой строки "\n"
, а это означает, что буквальная обратная косая черта (определенная с помощью двух обратных косых черт в литерале) является избыточной и может быть удалена.
n
, вам нужно String pattern = "\\\\n"
. Чтобы сопоставить обратную косую черту, вам нужно 4 обратных слэша в строковом литерале, представляющем 2 обратных слэша в строке, переданной движку регулярных выражений.
– Wiktor Stribiżew
4 December 2016 в 09:29