Прежде всего, этот вопрос относится к регулярным выражениям в теории формального языка , а не к регулярным выражениям, которые используются при разработке программного обеспечения (последние являются шаблонами для поиска строк, реальной жизни).программная реализация, основанная на концепциях, определенных в первом).
В вашем вопросе регулярное выражение - это описание набора строк, которые соответствуют этому выражению.Символы 0
, 1
и 2
соответствуют друг другу, в то время как символ *
означает, что предыдущий символ или группу символов (в скобках) можно повторять 0 или более раз, а символ ∪
является объединениемoperator.
Учитывая это, мы видим, что регулярное выражение 0*
соответствует пустой строке и следующим строкам: 0
, 00
, 000
и т. д. Аналогично, (0 ∪ 1)*
соответствует пустомуstring, 0
, 1
, 00
, 01
, 10
, 11
и т. д. - в основном, любая строка, построенная из 0
и 1
.Регулярное выражение 01*2
соответствует всем строкам, которые начинаются с одного нуля, за которым следует один или несколько и заканчиваются 2 (например, 02
, 012
, 0112
и т. Д.).
На основании этогорегулярное выражение в вашем первом примере может быть переведено на английский язык как «строка, начинающаяся с 0
, за которой следует группа из трех цифр 010
, которые встречаются ноль или более раз, а затем 1
», поэтому всеиз приведенных ответов совпадают.Во втором примере, однако, только 210012
соответствует регулярному выражению, все остальные ответы не совпадают (или, может быть, вы пропустили *
в конце: если регулярное выражение (21 ∪ 10)*0012*
, ответы сразу станут более понятными),Я оставлю третий пример для вас.
Обратите внимание, что во всех трех случаях есть намного больше строк, которые соответствуют заданным выражениям, а не только тем, которые приведены в ответах.