1

Я делаю это для домашней работы. Мне нужно написать регулярное выражение для языка над (a, b), который включает в себя все строки, не вошедшие в язык (a*b)*Мне нужна помощь в поиске всех строк, не включенных в (a * b) *

, например «aaaaaaabaaaaaaaabaaaaaaabaaaabaaaaaaaaab» будет работать. Поэтому я ищу регулярное выражение для allll строк, которые не включены в это.

Можете ли вы мне помочь, по крайней мере, на правильном шаге, чтобы понять это?

Я знаю, что a*b означает как много a, так как мы хотим, а затем один b. Тогда весь этот вид столько раз, сколько мы хотим.

+0

@hwnd, просто нужен способ выражения reg, который включает все строки не в ((столько раз, сколько следует b) столько раз). – user3023259

+0

Вы не просто говорите 'a * b *' вы? Или вы хотите совместить aaaaaabaaaaaaaaaaabaaaaaaabaaaaaab? – brandonscript

+0

@ r3mus, нет, я говорю о '(a * b) *', так, как будто у вас есть «aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab». Затем регулярное выражение во всех строках, которые не включены в это. – user3023259

ответ

0
[^ab]* 

Это, вероятно, должно сделать трюк. Это говорит, что в строке не должно быть a или b.^- символ отрицания.

+0

За исключением OP хочет все * кроме * это. – brandonscript

2

кажется, что ваш (a*b)* регулярное выражение соответствует все, что заканчивается в б или пусто.

поэтому регулярное выражение, которое соответствует все, что конец в , кажется, решение ..

a$ или /a$/

+0

Я удалил свой пост, потому что ваш вопрос верен. – Ingo

+0

@gaby aka G. Petrioli Спасибо! – user3023259

0

Можно перебирать строку и проверить символов, кроме «а 'и' b '. Кажется, что цепочки «b» разрешены, а пустая строка является частью языка, так как звезда Клейна допускает нулевые экземпляры символа.