Как я могу представить эпсилон в регулярном выражении? - PullRequest
2 голосов
/ 15 сентября 2010

Учебник учит нас писать регулярные выражения с использованием символа epsilon (ε), но как я могу перевести этот символ непосредственно в код без необходимости полностью переделывать мое регулярное выражение?

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

Не уверен на 100%, что это правильно, но ...

((a| epsilon) [az] * a) |(a [az] * (a | epsilon))

Так что некоторые строки, которые должны соответствовать, включают:

a //single "a" starts or ends with "a"

aa //starts and ends with "a"

ab //starts with "a"

ba //ends with "a"

aba //starts and ends with "a"

aaaaaaaa //starts and ends with "a"

abbbbbbb //starts with "a"

bbbbbbba //ends with "a"

abbbbbba //starts and ends with "a"

asdfhgdu //starts with "a"

onoineca //ends with "a"

ahnrtyna //starts and ends with "a"

Я только то, что нужно обменять epsilon на правильныеСимвол, я не хочу изменять какую-либо часть остальной части выражения.Также я хочу прояснить, я на самом деле не проверяю символ epsilon, я хочу выбрать символ или ничего (ну, не ничего ... epsilon).

Имеет ли такоесимвол существует?

Возможно ли то, что я хочу?

1 Ответ

7 голосов
/ 15 сентября 2010

Просто опустите ?, так как он обозначает пустую строку:

([1-9]|)[0-9]*

Существует также ярлык для этого конкретного случая:

([1-9]?)[0-9]*

? означает ноль или единицувхождения предыдущего токена.

...