2011-12-02 13 views
5

Sto provando a creare un'espressione regolare che sceglierà le due opzioni più lunghe da una stringa.Espressione regolare per selezionare l'opzione più lunga

Un valore numerico lungo fino a 15 caratteri o un valore qualsiasi con un massimo di 11 caratteri.

Finora ho questo:

^([0-9]{1,15}|.{1,11}) 

Ma per esempio la stringa: '7elevenshopfood' ottiene ridotto a '7' perché guarda alla prima parte della paranthesis. E se passo a

^(.{1,11}|[0-9]{1,15}) 

la stringa '123456789123456789' viene ridotto a '12345678912' dal momento che sembra alla prima parte dell'espressione di nuovo.

Chiunque abbia una maggiore conoscenza delle regexp ha un'idea?

+0

Che regex dialetto/lingua/strumento? – Qtax

risposta

6

Questo è il modo in cui la maggior parte dei dialetti regex funziona, le alternanze vengono testate in ordine di scrittura e la prima parte corrispondente termina la ricerca.

Nel tuo caso è possibile aggirare che con qualcosa di simile:

^(\d{12,15}|.{1,11}) 
+2

Ottima risposta. – FailedDev

+0

così semplice! : +1. – Toto

+0

Questo è così ovvio quando lo vedi ... Grazie! – Sonny