2015-01-30 3 views
1

мне нужно понять картину, как это: ^9(ab|cd|ef?)$Как понять шаблон регулярного выражения?

У меня есть несколько примеров строк передачи и не передавая эту модель:

9 - NO 
9cd - YES 
9e - YES 
9acef - NO 

Я не знаю, почему третий пример был принят и четвёртом был не. Я вижу рисунок вроде так: 9, затем a, затем (b or c), затем (d or e), затем f (ноль или один раз). Но я думаю, что мое понимание неверно. Может кто-нибудь объяснить мне, как это увидеть?

+1

Вы путаете 'then' (конкатенацию)' или '(' | '). То, что вы описали, будет '9a (b | c) (d | e) f' – Bergi

+1

Сайты, такие как https://regex101.com/, являются большой помощью для такого рода вещей, поскольку это может сломать ваше регулярное выражение и показать, что детали соответствуют/не соответствуют –

+0

да, это он, спасибо – krzyhub

ответ

1

Я вижу шаблон таким образом: 9, затем a (b или c), затем (d или e), затем f (ноль или один раз).

Неправильно. Это на самом деле, как 9, затем ab или cd или ef или e и конец границы линии. Таким образом, это регулярное выражение будет соответствовать 9e, но не 9acef. В макс и мин символы, которые разрешены после 9 будут 2 (AB, CD, эф) или 1 (е) , то есть не более чем 2. ? здесь повернут предыдущий маркер в качестве факультативного, ef? матчей ef или e.

+0

ok, поэтому альтернативный знак включает блоки знаков , спасибо – krzyhub

+0

yep. верный... –

1

Труба означает ИЛИ. (ab|cd|ef?) означает либо ab OR cd OR e, а, может быть, f. Одна из альтернатив должна присутствовать, но множественные альтернативы не могут присутствовать.

Элементы^и $ являются якорями, указывающими, где должны начинаться и начинаться входные данные. $ Anchor говорит, что конец ввода должен немедленно следовать содержимому, которое соответствует (ab|cd|ef?).

  • 9: альтернативы нет, это не соответствует.

  • 9cd: присутствует альтернатива cd, поэтому это соответствует.

  • 9e: есть альтернатива e и 0 более fs, это соответствует.

  • 9acef: присутствуют две альтернативы, и конец ввода не наступает после ef; поскольку регулярное выражение указывает, что конец ввода должен начинаться после одной из альтернатив, и появляются две альтернативы, это не соответствует.

1

^9(ab|cd|ef?)$ переводит:

9, а затем ab или cd или ef или e только.

шаблон согласования ваших ожиданий является:

9a(b|c)(d|e)f?$

1

9(ab|cd|ef?) означает: следует либо аб или кд или эф или х (так как Р опционально, ?.

^ и $ обозначают начало и конец строки соответственно.

Подсказка: многие тестеры Regex (например, regexr.com) предоставляют объяснение типированного регулярного выражения при наведении курсора мыши.

Смежные вопросы