2012-03-13 20 views
7

Voglio abbinare le parole del corpo di cammello che iniziano con ! come !RedHat contenute in $line. Sto usando php 5.3.10-1ubuntu2 with Suhosin-Patch (cli).Come abbinare il punto esclamativo (!) In PHP?

sto cercando seguenti cose:

  • $line = preg_replace(" !([A-Z])", " $1", $line);
    • risultato: PHP Warning: preg_replace(): No ending delimiter '!' found
  • $line = preg_replace(" \!([A-Z])", " $1", $line);
    • risultato: PHP Warning: preg_replace(): Delimiter must not be alphanumeric or backslash
  • $line = preg_replace(" [!]([A-Z])", " $1", $line);
    • risultato: PHP Warning: preg_replace(): Unknown modifier '('
  • $line = preg_replace(" [\!]([A-Z])", " $1", $line);
    • risultato: PHP Warning: preg_replace(): Unknown modifier '('

Come è il modo corretto di abbinare ! in PHP espressione regolare?

risposta

6

è necessario utilizzare delimitatori nel regex - non alfanumerico, come il messaggio di errore indica:

$line = preg_replace("/ !([A-Z])/", " $1", $line); 

Privacy i / personaggi all'inizio e alla fine della stringa regex.

Questi non devono essere / - si potrebbe usare # o addirittura ! - ma se si utilizza ! allora avrete bisogno di sfuggire al ! char all'interno del regex stesso.

+0

non è necessario sfuggire al '!' –

+0

@BartKiers Sì, lo so - ho appena copiato una delle sue opzioni casuali - si è rivelato essere il secondo. Ho aggiornato la risposta ora. –

+0

@OP Si noti che per utilizzare le funzioni regex di php è necessario racchiudere l'espressione con un delimitatore "casuale" (auto-scelto). Questo può essere/(come nell'esempio), ma anche &, *, o qualsiasi altra cosa. Ma praticamente nessun esempio trovato su internet omette questi allegati (che è corretto), quindi non dimenticarli :) – giorgio

-1

Prova questo:

!\b([A-Z][a-z]*){2,}\b 

Live Preview: http://regexr.com?30a95 (controllo globale e multilinea).

+1

il limite della parola in '!\ b [A-Z] 'può essere semplicemente omesso: c'è sempre un' \ b' tra '!' e una lettera. Il problema dell'OP sono i delimitatori, che Aleks ha già menzionato nella sua risposta. –

Problemi correlati