E come posso indovinarlo. Parliamo di div dici che vuoi contare un testo quindi immagino che si tratti dei div.
E come posso indovinarlo. Parliamo di div dici che vuoi contare un testo quindi immagino che si tratti dei div.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
ad esempio, se io voglio sapere quante volte si ripete la parola agosto in questo codice
che cosa dovrei modificare al mio codice regex? fino adesso abbiamo visto come selezionare i div globalmente, poi come selezionare quelli con un tipo di classe, adesso manca sapere come contare i div che hanno in comune un testocodice HTML:<div class="mesi">giugnio</div> <div class="mesi">luglio</div> <div class="mesi">Agosto</div> <div class="mesi">Agosto</div> <div class="giorni">mercoledi</div> <div class="giorni">giovedi</div> <div class="giorni">Venerdi</div>
Con quello che ho postato hai tutti gli elementi per farlo. Basta avere un po’ di immaginazione.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
badaze vorrei avere un ultimo chiarimento riguardo al espressione regolare
$patternInc = "/(<div.*class=('|\")mesi('|\")[^>]*>(.+?)<\/div>)/msi";
vedi io avevo capito fino qui (<div.*class=('|\")mesi('|\")
quello che ancora non capisco e questa espressione [^>]*>(.+?)
dicevi che il simbolo tra parentesi quadre ^ sta a dire prendi tutto tranne il carattere >
ma non avrebbe senso, perche dopo "mesi" ci dovrebbe stare un > , cosi da fare il tag <div ="mesi">
e poi continuando, ci metti ancora il carattere * che sta a indicare che ci devono essere altri caratteri prima di >
e poi ancora tra parentesi tonde ci metti il punto, il + e il ? ... scusa ancora per le mie domande, ma vorrei avere tutto chiaro.
Dopo "mesi" potresti avere altri elementi come id="pippo" o altro. Quindi non prendere i caratteri che non sono > ha senso. Puoi fare a meno di mettere [^>] nel tuo caso. Ma sappia che non funzionerà se aggiungi altri elementi.
* dice che ci sono da 0 fino a n caratteri. Quindi per « parsare » sia "mesi"> che "mesi" id="pippo">.
.+? dice che c’è almeno un carattere ma prendere la stringa con meno caratteri.
Fai una prova con il mio esempio. Prima con ? e ti salvi il sorgente della pagina (non quello che vedi sul browser) poi senza e guarda le differenze.
A partire da un certo momento è difficile spiegare se non si ha una certa infarinatura.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
ho fatto la prova e ho scaricato il codice sul pc e dopo aver controllato con un editor di testo normale non ho notato nessuna differenza, e anche ispezionando il dom dal mio browser firefox non noto differenza, e a questo punto mi chiedo, a quale cambio ti riferisci??
tornando a noi adesso credo di aver capito tutto il codice regex, ho fatto una modifica e mi funziona anche cosi
$pattern = "/(<div.class=('|\")mesi('|\")>agosto<\/div>)/msi";
mi chiedevo anche perche non avresti potuto fare cosi (^>) al posto di [^>] . che differenza c'e tra le parentesi quadre e tonde?
quello che non mi e ancora del tutto chiaro e .+? dice che c’è almeno un carattere ma prendere la stringa con meno caratteri. prende solo stringhe con pochi caratteri, oppure e solo un modo di dire, perche se ci fosse una stringa lunga, ci sarebbero problemi?
Ultima modifica di riccardo94; 28-08-2018 a 11:09
Eppure differenze ce no sono.
Senza ? => div.+
$patternInc = "/(<div.+class\s*=\s*('|\")mesi\\2[^>]*>(.+?)<\/div>)/msi";
Con ? => div.+?codice:array(4) { [0]=> array(1) { [0]=> string(121) "<div class="mesi">giugnio</div><div class="mesi">luglio</div><div class="mesi">Agosto</div><div class="mesi">Agosto</div>" } [1]=> array(1) { [0]=> string(121) "<div class="mesi">giugnio</div><div class="mesi">luglio</div><div class="mesi">Agosto</div><div class="mesi">Agosto</div>" } [2]=> array(1) { [0]=> string(1) """ } [3]=> array(1) { [0]=> string(6) "Agosto" } }
$patternInc = "/(<div.+?class\s*=\s*('|\")mesi\\2.*?>(.+?)<\/div>)/msi";
codice:array(4) { [0]=> array(4) { [0]=> string(31) "<div class="mesi">giugnio</div>" [1]=> string(30) "<div class="mesi">luglio</div>" [2]=> string(30) "<div class="mesi">Agosto</div>" [3]=> string(30) "<div class="mesi">Agosto</div>" } [1]=> array(4) { [0]=> string(31) "<div class="mesi">giugnio</div>" [1]=> string(30) "<div class="mesi">luglio</div>" [2]=> string(30) "<div class="mesi">Agosto</div>" [3]=> string(30) "<div class="mesi">Agosto</div>" } [2]=> array(4) { [0]=> string(1) """ [1]=> string(1) """ [2]=> string(1) """ [3]=> string(1) """ } [3]=> array(4) { [0]=> string(7) "giugnio" [1]=> string(6) "luglio" [2]=> string(6) "Agosto" [3]=> string(6) "Agosto" } }
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
Vedere post di prima.
Perché ci sono differenze come nelle parole pane e microscropio. Nulla a che vedere.
Le parentesi tonde indicano un gruppo della regexp che si vuole ricavare. Vedere come è riempito l'array $matches => post #7 di Alhazred.
Per escludere un carattere o una serie si usa ^ ma rinchiuso tra [ e ]. => [^ab] significa no a no b.
Quindi ^ fuori parentesi quadre è l'inizio e dentro è l'esclusione.
Se hai due stringhe. Una lunga 999 caratteri e una lunga 1000. La più corta è quella con 999 caratteri.
Se hai due stringhe. Una lunga 2 caratteri e una lunga 3. La più corta è quella con 2 caratteri.
Capito il concetto ?
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr
quindi un ^ fuori parentesi quadre significa il inizio.. ma anche dentro le parentesi tonde??
e poi se nel div ci sono due parole esempio, agosto e settembre, il codice reg prende solo agosto?
Devi guardare la documentazione.
Ridatemi i miei 1000 posts persi !!!!
Non serve a nulla ottimizzare qualcosa che non funziona.
Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr