Как сопоставить ^
(начало строки) и $
(конец строки) в []
(группа символов)?
простой пример
строка стога сена: zazty
правила:
проход: сопоставить первые два "z"
, регулярное выражение, которое будет работать, выглядит так: (?: ^ | [aAbB]) ([zZyY])
Но я продолжаю думать, что было бы намного чище с чем-то вроде этого означало начало / конец строки внутри группы символов [^ aAbB] ([zZyY])
(в этом примере предполагается, что ^
означает начало строки, а не то, что оно есть на самом деле, отрицательное значение для группы символов)
примечание: использование python. но было бы хорошо знать, что на bash и vim.
Обновление: прочтите еще раз руководство , в котором говорится о наборе символов, все теряет свое особое значение, кроме классов символов (например, \ w
)
внизу в списке классов символов есть \ A
для начала строки, но это не работает [\ AaAbB] ([zZyY])
Есть идеи, почему?
Почему бы не попробовать побег персонажа \
? ([\^\$]
)
ОБНОВЛЕНИЕ: Если вы хотите найти все Z и As, перед которыми стоит «a», вы можете использовать положительный взгляд назад. Вероятно, нет никакого способа указать подстановочные знаки в группах символов (потому что подстановочные знаки тоже являются символами). (Если бы я был рад узнать об этом).
private static final Pattern PATTERN = Pattern.compile("(?<=(?:^|[aA]))([zZyY])");
public static void main(String[] args) {
Matcher matcher = PATTERN.matcher("zazty");
while(matcher.find()) {
System.out.println("matcher.group(0) = " + matcher.group(0));
System.out.println("matcher.start() = " + matcher.start());
}
}
Вывод:
matcher.group(0) = z
matcher.start() = 0
matcher.group(0) = z
matcher.start() = 2