2015-02-27 3 views
5

Non sono così esperto nel regex, quindi non sono sicuro di come realizzare la cosa seguente:cattura opzionali personaggi che circondano

mi piacerebbe catturare qualsiasi stringa arbitraria da un ingresso che può o non può essere circondato dal carattere '$'. Se un carattere '$' è presente all'inizio della stringa, deve essere presente il carattere '$' alla fine.

Attualmente ho

^\w+([_.-]\w+)*$ 

che approssimativamente si traduce: '. '

  1. caratteri di parola arbitraria
  2. Inizio del gruppo cattura
  3. qualsiasi carattere di '_',,' - '
  4. Prima di un \ n
  5. opzionale

partite Quindi validi sarebbero:

test 
test-5 
test.1.3 
test-alpha.2 

Ora mi piacerebbe rendere questo possibile

$test$ 

Ma non ...

$test (or test$) 
+0

non vedo il 'Prima che un \ n' opzionale nel regex :-) – xanatos

risposta

3
^(?:(?:\w+(?:[_.-]\w+)*)|\$test\$)$ 

Il suo meglio per aggiungere che con | invece di modificare il originale. Vedi demo.

https://regex101.com/r/wU7sQ0/32

+0

avrei replicato il'^... $ 'invece di utilizzare il gruppo non-cattura, ma questo è il mio stile Io penso che per '$ test $' intendeva "il modello completo" e non semplicemente $ ** test ** $ – xanatos

+0

@xanatos dat richiederà una piccola modifica purché OP lo chiarisca :) – vks

+0

@vks Sì, intendevo il full patern, incluso "$";) –