Come individuare un ritorno a capo?

Salve a tutti,

in un campo MySql ho un testo, inserito tramite form, da cui devo individuare la parte di testo racchiusa da <p align=left> e </p>

Usando le espressioni regolari, con la formula (.*) riesco ad individuare il testo ma solo se non c'è nessun ritorno a capo (anche senza <br>). In questo caso non c'è verso di selezionarlo.... ho provato in mille modi ed anche con i vari \n \r (ad esempio usando (.*\n*) opp. (.*\s*) ... ecc...

E' possibile che il ritorno a capo semplice non si riesce ad individuarlo?

Grazie per l'aiuto

inviato 9 anni fa
Assolollo
X 0 X

Devi usare il modificatore di pattern "m" che sta per multiline:

preg_match("/espressione_regolare/m", "stringa...

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Grazie per il consiglio, ma io ho una situazione più complessa.....

Le espressioni regolari vengono prelevati da un file code.ini tramite il comando:

$_rulesarray = parse_ini_file('code.ini', true);

Nel file code.ini ho queste righe:

from =  "/\<p align=left\>(.*)\<\/p\>/"

to   =  "\[left\]$1\[\/left\]"

Praticamente con una funzione devo trasformare i tag da: <p align=left>testo...</p> a: '['left]testo...[/left]

Questa trasformazione viene fatta tramite i comandi:

foreach ($_rulesarray as $_action => $_rules) {
      $MCode = preg_replace ($_rules['from'], $_rules['to'], $MCode);
   }

dove $MCode è il testo letto dal db.

La trasformazione funziona solo se nel testo non è presente nessun ritorno a capo.

Con il tuo consiglio ho provato a modificare in questo modo:

from =  "/\<p align=left\>(.*)\<\/p\>/m"

to   =  "\[left\]$1\[\/left\]"

Ma non cambia nulla  :-\

Sbaglio qualcosa?

risposto 9 anni fa
Assolollo
X 0 X

chiedo venia, devi usare il modificatore /s e non /m

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Adesso va...  :)

perfetto. Grazie tante  O0

 :bye:

risposto 9 anni fa
Assolollo
X 0 X

Purtroppo i problemi non sono finiti......  :(

La seguente espressione:

from =  "/\<p align=left\>(.*)<\/p>/s"

to   =  "\[left\]$2\[\/left\]"

mi intercetta il testo che va dal tag <p align=left> all'ultimo </p> che trova. In altre parole, se c'è un'altro tag <P di apertura e chiusura, mi considera il testo anche in questa posizione.... fino all'ultimo </p> di chiusura...

Sbaglio qualcosa?

Grazie

risposto 9 anni fa
Assolollo
X 0 X

devi cambiare l'espressione regolare per renderla "affamata": da (.*) a (.*?)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

GRAZIE GIANNI

SEI STATO SUPER   O0

risposto 9 anni fa
Assolollo
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda