/ / Cosa sta cercando questa espressione regolare [chiuso] - php, regex, preg-match

Che cosa è questa espressione regolare alla ricerca di [closed] - php, regex, preg-match

preg_match ("/[-_^%&().A-Z0-9]/", $file)

A quanto pare, posso vedere che la coda finisceè Anything A-Z e 0-9, ma non sono sicuro per l'inizio. Perché ^ non è sfuggito, quindi potrebbe essere un "^" letterale o valutato in un NOT, e lo stesso vale per ".", "(" E ")". Quindi sono solo un po 'confuso. Avere cose all'interno dell'opzione [] significa che le cose sono letteralizzate?

risposte:

3 per risposta № 1

Cerca solo uno dei personaggi nella classe dei personaggi. Cioè uno di:

  • Trattino-meno, carattere di sottolineatura, punto di inserimento, percentuale, commerciale, parentesi, punto
  • Lettere latine maiuscole
  • Numeri arabi

^ viene interpretato come negare una classe di caratteri solo all'inizio della classe. . perde il suo significato speciale all'interno del personaggioclassi completamente. Quindi sì, nelle classi di personaggi molti caratteri regex speciali vengono usati letteralmente. Con eccezioni, sebbene il seguente elenco non sia esaustivo:

  • Trattino-meno (-) indica un intervallo tra due altri caratteri (ovvero non all'inizio o alla fine).
  • Il segno di omissione (^) come descritto sopra.
  • Classi di caratteri predefinite (ad es. w) può anche essere usato, che formerà un'unione con i personaggi di quella classe. Quindi la tua classe di personaggi potrebbe essere abbreviata [-^%&().w].

2 per risposta № 2

^ ha solo un significato speciale dentro [] se è il primo carattere.
- ha solo un significato speciale dentro [] Se è tra due personaggi letterali.
., ( e ) non ha un significato speciale dentro [].

Basta leggere le informazioni di base nel docs ti direi tutto questo.

La regex corrisponde solo a uno dei personaggi della classe.