Регулярное выражение: наличие всех строк, кроме bba и abb - PullRequest
0 голосов
/ 29 октября 2018

Я работал над Регулярным выражением. Возник вопрос о создании Регулярного выражения, содержащего строку, содержащую хотя бы один из bba или abb , но не оба одновременно .

Я сделал ниже выражение для этого.

а * (бе *) B + B (а * AB) а

Но, у меня возникает вопрос о создании регулярного выражения, содержащего все строки, кроме bba и abb

Сейчас я в замешательстве.

Пожалуйста, помогите.

Примечание: речь идет об автоматах, а не JavaScript или регулярных выражениях PHP ........

Ответы [ 3 ]

0 голосов
/ 29 октября 2018

Попробуйте регулярное выражение ^(?!(.*abb.*bba|.*bba.*abb)).*$

Это будет соответствовать строке, содержащей либо abb, либо bba, но не оба

Regex

0 голосов
/ 29 октября 2018

Если это автомат, ответ не будет просто

b(aa*b + a)* + (aa*b + a)* + b*         
// First one:  words like baaaaabaababab, baaa, babaaaaaa 
// Second one: words like aaaaabaababab, aaaaaa, aab
// Third one:  words like bbbbb, b, , bbb

потому что вы не можете набрать bb, если это не единственное слово в регулярном выражении

a ^ + означает хотя бы один a и может быть заменен на aa *

0 голосов
/ 29 октября 2018

Вы можете использовать чередование с положительным и отрицательным прогнозом, чтобы утверждать, что одного из вариантов нет, а другой - наоборот.

^(?:(?=.*abb)(?!.*bba)|(?!.*abb)(?=.*bba)).*$

Regex demo

Если ни один из них не может быть там, вы можете использовать:

^(?!.*(?:abb|bba)).*$

...