Problema con preg_match

di il
3 risposte

Problema con preg_match



$rule = "/20.*fiamma.*-20.*\/a\/b\/c/";

$text = "
20 fiamma on line -20
vuota
vuota
/a/b/c
";

if (!preg_match($rule, $text)) {
    trigger_error('Il test ha dato esito negativo');
}
Perchè il test dà esito negaivo?

3 Risposte

  • Re: Problema con preg_match

    Proverei così:
    
    $rule = "#20.*fiamma.*-20.*/a/b/c#m";
    
    L'uso di delimitatori diversi è opportuno, visto che capita spesso che il carattere delimitatore sia presente nel testo. Inoltre mi pare che il testo si estenda su più linee, per cui aggiungerei il PCRE_MULTILINE flag
  • Re: Problema con preg_match

    mentat ha scritto:


    Proverei così:
    
    $rule = "#20.*fiamma.*-20.*/a/b/c#m";
    
    L'uso di delimitatori diversi è opportuno, visto che capita spesso che il carattere delimitatore sia presente nel testo. Inoltre mi pare che il testo si estenda su più linee, per cui aggiungerei il PCRE_MULTILINE flag
    non funziona, o meglio funziona solo al posto di 'm' metto 's'
  • Re: Problema con preg_match

    Direi che 's' va bene, probabilmente ci sarebbe da capire come e perché 'm' non interpreta i ritorno a capo.
    In effetti 's' serve allo scopo:


    s (PCRE_DOTALL)
    If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier."
Devi accedere o registrarti per scrivere nel forum
3 risposte