2011-01-03 15 views
9

Eventuali duplicati:
A Regex that will never be matched by anythingUna semplice regex Perl garantita per non corrispondere mai a una stringa?

Ho uno script che prende un'espressione regolare come parametro. Per impostazione predefinita, voglio impostare l'espressione regolare a qualcosa che non potrà mai corrispondere a qualsiasi stringa, quindi posso semplicemente dire

if ($str =~ $regex) 

senza per esempio dover controllare prima ($ regex) prima.

mi si avvicinò con

qr/[^\s\S]/ 

ma non so se questo corrisponderà qualche personaggio utf8 che non è né uno spazio né un non-spazio.

risposta

20
+0

La soluzione di MJD è meglio di qualsiasi altra cosa offerto qui o sulla presunta domanda DUP che questo merita di essere conservato. – tchrist

+0

@tchrist: Dal mio punto di vista, per mia stessa ristretto, quasi tutto di MJD è oro puro. L'uomo è un Perl Alchimista o qualcosa del genere. – Hugmeir

+0

Per illuminare: il pattern vuoto '//' o '(? :)' non asserisce nulla, e quindi corrisponde sempre. '(?!)' è un lookahead negativo per il pattern vuoto (ciò che si trova tra '!' e ')' è il corpo dell'asserzione) e quindi non può mai corrispondere. – hobbs

5

Combina un lookahead negativo per un carattere arbitrario seguito da una corrispondenza per quel carattere, ad es.

/(?!x)x/ 

Funziona su tutti i casi di test che ho lanciato. Ecco alcuni test su rubular.

4

/ ^/ sembra fare, ed è breve (est).

Problemi correlati