Регулярные выражения - PullRequest
       7

Регулярные выражения

0 голосов
/ 29 октября 2011
L= { w is {1,2,3}* 
   | w starts with 3, ends with 2 and there is a substring of only 1 with length 
       even equal or >2}.

Таким образом, результат некоторых тестов должен быть:

3323112: accepted
311211112: non accepted
31112: non accepted
32: non accepted
2113: non accepted
313212: non accepted

Мой ответ: 3*(11)*2*

Но он не проходит некоторые тесты ... Может кто-нибудь помочь мне?

Второе упражнение:

L= { w is {1,2}* 
   | in w after every 1 there is one or more 2, but if the 1 is the last 
     character it could be the last (no 2 after it)}

Тестовые строки:

1: accepted
222:  accepted
221212122:  accepted
1222121:  accepted
111221: not  accepted
11: not  accepted

Мое решение - (12*)*

Но оно не проходит некоторые тесты ..Помогите мне, пожалуйста.

Ответы [ 3 ]

1 голос
/ 29 октября 2011
  • Начинается с 3: ^3
  • Завершается с 2: 2$
  • Содержит последовательность по крайней мере из двух 1: 1{2,}
  • Результирующее регулярное выражение: ^3[1-3]*1{2,}[1-3]*2$ (части [1-3]* допускают любые цифры от 1 до 3, поскольку там нет никаких требований)
  • РЕДАКТИРОВАТЬ: я думаю, что я неправильно понял условие о 1 с,
    таким образом, образец для этого: (?<!1)(1{2})+(?!1) (смотреть назад и смотреть вперед, чтобы гарантировать, что 1s изолированы)
  • Исправленный образец: ^3[1-3]*(?<!1)(1{2})+(?!1)[1-3]*2$

  • Послекаждые 1 есть хотя бы один 2: (?<!1)12+ (убедитесь, что перед ним нет 1 с)
  • В последнем 1 может не быть 2 после: 1?$
  • Результат: ^((?<!1)12+)*1?$

Надеюсь, это поможет.Удачи с регулярными выражениями, их трудно выучить, но легко, когда вы освоите их.

1 голос
/ 29 октября 2011

Так как это похоже на домашнюю работу, я не буду давать прямой ответ. Вы захотите посмотреть на модификаторы в регулярных выражениях. * обозначает повторение 0 или более раз. Также есть +, ? и квадратные скобки для классов персонажей. Также обратите внимание, что некоторые вещи, которые доступны, могут зависеть от используемого вами синтаксического анализатора регулярных выражений (часто называемого «вкус»). Но некоторые основы обычно одинаковы.

Удачи!

1 голос
/ 29 октября 2011

Я не собираюсь делать за вас домашнее задание, но укажу несколько проблем с тем, что вы пытаетесь сделать:

  • Звезда сама по себе не является подстановочным знаком. Это не значит «соответствовать чему-либо». Это квантификатор , который изменяет предыдущий токен. Вы хотите использовать .* вместо *, чтобы разрешить любое количество любых символов.
  • Выражение .*(11)*.* также сопоставляет строки с нечетным числом 1 с, поскольку . также может быть единицей. Цифра непосредственно перед и после 1 должна быть «not-a-1» (то есть 2 или 3).

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...