Регулярное выражение для строк с четным числом а и нечетным числом б - PullRequest
14 голосов
/ 13 сентября 2010

У меня возникла проблема в решении проблемы: - Это задание, я решил его, но оно кажется слишком длинным и расплывчатым. Может ли кто-нибудь помочь мне, пожалуйста ......

Регулярное выражениедля строк с четным числом a и нечетным числом b, где набор символов = {a, b}.

Ответы [ 13 ]

0 голосов
/ 21 октября 2016

Я бы сделал следующее:

  • регулярное выражение четное соответствует символу a , затем последовательность b , затем символ a снова, затем другая последовательность b , такая, что есть четное число b 's:

даже -> ( a ( bb ) * a ( bb ) * | a b ( bb ) * a b ( bb ) *)

  • регулярное выражение нечетное делает то же самое с нечетным общим числом b s:

нечетное -> ( a b ( bb ) * a ( bb ) * | a ( bb ) * a b ( bb ) *)

Строка четного числа a и нечетное число b либо:

  • начинается с нечетного числа b и являетсяс последующим четным числом нечетных образцов средиst четные паттерны;
  • или начинаются с четного числа b 's, после чего следует нечетное число нечетных паттернов среди четные узоры.

Обратите внимание, что четные не имеют никакого влияния на четность / нечетность a / b в строке.

регулярное выражение -> (

b ( bb ) * даже * ( нечетное четное * нечетное ) * четное *

|

( bb ) * четный * нечетный четный * ( нечетный четный * нечетный ) * четный *

)

Конечно, каждый случай может заменить четный и нечетное в последнем регулярном выражении для получения одного регулярного выражения.

Легко видеть, что строка, удовлетворяющая этому регулярному выражению, действительно будет иметь четное число a 's (как символ a встречается только в четных и нечетных подрешетках, каждый из которых использует ровно два a ) и нечетноечисло b 's (первый случай: 1 b + четное число b ' s + четное число нечетное ; второй случай: четное число b 's + нечетное число odd ).

Строка с четным числом a ' s инечетное число b будет удовлетворять этому регулярному выражению, так как оно начинается с нуля или более b , затем следует [один a , ноль или более б s, еще один a и ноль или более b 's, ноль или более раз.

0 голосов
/ 25 февраля 2016

(бб) * б (аа) * + (аа) * б (бб) *

Это ответ, который обрабатывает все виды строк с нечетными b и четными a.

0 голосов
/ 30 ноября 2014

ответ (аа + ab + ba + bb) * б (аа + ab + ба + бб)

...