Regex in Blocco note ++ 6


3

Quindi, Notepad ++ è stato aggiornato alla v6.0 . Una delle loro nuove funzionalità è PCRE (Perl Compatible Regular Expressions).

Ho provato a utilizzare questa nuova funzionalità per trovare e sostituire elementi in un file. Ho provato l'espressione regolare:

{\$([a-zA-Z_]*)}

e mi ha urlato dicendo "Espressione regolare non valida".

Ho provato questo regex in altri programmi (come il mio IDE principale, Geany ), e ha funzionato bene.

Perché questo non funziona in Notepad ++ 6.0?


Cosa ti aspetti che faccia la tua regexp?
Daniel Andersson,

Mi aspetto che corrisponda a stringhe come questa: {$first_name}, {$street_address}. Cosa che fa: rubular.com/r/uSup4HRn7n
Rocket Hazmat

Risposte:


3

Devi scappare {}così:

\{\$([a-zA-Z_]*)\}

Presumo che Geany e rubular.com non usino PCRE (o lo usano in modo diverso). Si noti che {}vengono generalmente utilizzati per indicare i quantificatori.

Senza aver verificato la fonte, posso solo supporre che Notepad ++ cerchi di essere troppo intelligente prima di passare l'espressione regolare alla libreria PCRE. Se eseguo il seguente codice in PHP:

echo preg_match( '{\$([a-zA-Z_]*)}', '{$something}' );

Stampa 1subito. Non c'è bisogno di sfuggire a nulla.

Scusa se non riesco a spiegarlo :(


1
Sono un po 'confuso, a dire il vero.
Der Hochstapler,

In PHP, devi sfuggire a $, ma non a {}. ideone.com/oy44V
Rocket Hazmat

@Rocket Penso che devi scappare solo $se usi virgolette doppie "anziché virgolette singole '.
Der Hochstapler,

1
Ma $significa "fine della stringa" in regex. Dovresti sfuggire alle doppie virgolette a causa dell'interpolazione variabile di PHP.
Rocket Hazmat,

1
Scusa, mi sono confuso. Hai ovviamente ragione. Grazie per averlo notato.
Der Hochstapler,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.