Как я могу представлять Epsilon в регулярном выражении?

StackOverflow https://stackoverflow.com/questions/3716269

  •  02-10-2019
  •  | 
  •  

Вопрос

Текстовая книга учит нас писать регулярные выражения, используя 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]*

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top