Как я могу представлять Epsilon в регулярном выражении?
Вопрос
Текстовая книга учит нас писать регулярные выражения, используя EPSILON (ε)
Символ, но как я могу перевести этот символ непосредственно в код без необходимости полностью перепроектировать мое регулярное выражение?
Например, как бы я написал это регулярное выражение, которое будет ловить все строчные строки, которые либо начинают, либо заканчиваются a
(или оба).
Не на 100% уверен, что это правильно, но ...
((а |epsilon
) [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
Для правильного символа я не хочу модифицировать какую-либо часть остального выражения. Также я хочу быть ясно, я на самом деле не проверяет символ эпсилона, я хочу иметь выбор персонажа или ничего (ну нечего ... Эпсилон).
Есть ли существует ли такой символ?
Это то, что я хочу возможен?
Решение
Просто опускают ε, так как он обозначает пустую строку:
([1-9]|)[0-9]*
Также есть ярлык для этого конкретного случая:
([1-9]?)[0-9]*
То ?
означает ноль или одно вхождению предыдущего токена.