Domanda

Il libro di testo ci insegna a scrivere espressioni regolari utilizzando il simbolo (ε) epsilon, ma come posso tradurre quel simbolo direttamente al codice senza dover rielaborare completamente la mia espressione regolare?

Per esempio, come avrei scritto questo regex che cattura tutte le stringhe minuscole che o iniziare o finire in a (o entrambi).

Non al 100% sicuro che questo è corretto, ma ...

((a | epsilon) [a-z] *a) | (Un [a-z] * (a | epsilon))

Così alcune stringhe che dovrebbe corrispondere includere:

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"

Ho solo cosa lo scambio epsilon per il simbolo corretto, non voglio modificare qualsiasi parte del resto dell'espressione. Anche io voglio essere chiaro, non sto in realtà controllando il simbolo Epsilon, voglio avere una scelta di un carattere o nulla (anche non nulla ... epsilon).

Fa un tale simbolo esiste?

è ciò che voglio possibile?

È stato utile?

Soluzione

basta omettere il e, dal momento che indica la stringa vuota:

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

C'è anche una scorciatoia per questo caso particolare:

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

I mezzi ? zero o uno occorrenze della precedente token.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top