Newsgroup: it.comp.www.php
Titolo: Espressione Regolare Aiuto !

Vorrei filtrare l' utima parola di una frase!
esempio se ho un testo in questo modo
$text  =
"Il mio accendino è rosso . Tavolo 30x70. Il mio cane si chiama Kira.
Quadro Picentino 50 x 76.Vado al mare in 500.
Il valore minimo  >100. Il gruppo Remax2000";
/*
Nota !! alcune frasi finiscono con un numero preceduto  da un qualsiasi
carattere non alfabetico oppure una x(sola) , quelle non debbono essere
considerate
A volte il punto è preceduto da uno spazio, come nella prima frase
*/
l' espressione regolare mi deve restituire
rosso
Kira
500
Remax2000
Qualche consiglio ?

 Qualche consiglio ?
Forse piu' facile fare una estrazione a due passi al posto di mettere
tutto in una espressione?
Prima tutte le parole complete prima del . e 
poi dopo la restrizione con il [x><=] [digit]?

di Domenico G. wrote:

Non sei stato chiarissimo...
Ho un dubbio su quel 50 x 76 .. che tu non vuoi.. ma forse è un errore 
di battitura e volevi scrivere 50x76.
Per frase invece suppongo che tu intenda qualcosa che finisce per punto 
(ma Remax2000 non ce l'ha).
Detto questo.. tenendo conto che tutte le frasi devono finire per punto 
e che si tratti di 50x76.. io farei così.. non sarà il massimo 
dell'ottimizzazione.. ma si evita di incasinarsi troppo la vita.
Le regxp potrebbero anche essere sbagliate in qualche caso.. anche 
perchè.. come ti ho detto .. non ho capito bene tutti i parametri che 
devono intervenire nella valutazione... inoltre le ho buttate giù al 
volo senza pensarci troppo... quindi prendile con le molle.
Il principio è..
- Trovo tutte quelle che non vuoi e le metto in $a[1].
- Le pulisco dagli spazi (mi veniva più comodo lasciarli per non 
complicarmi la prima regxp).
- Trovo tutte le parole prima del punto e le metto in $b[1].
- Faccio la differenza dei due array e trovo tutte la parole che 
rispettano i parametri richiesti.
<?php
function toglispazi (&$elemento) {
	$elemento = trim($elemento);
}
$text  =
"Il mio accendino è rosso . Tavolo 30x70. Il mio cane si chiama Kira.
Quadro Picentino 50x76.Vado al mare in 500.
Il valore minimo  >100. Il gruppo Remax2000.";
preg_match_all("/([\s\d]+[x\W]\d+)\s?\./i",$text,$a);
array_walk ($a[1], 'toglispazi');
preg_match_all("/\s+(\S+)\s?\./i",$text,$b);
$c = array_diff($b[1],$a[1]);
print_r($c);
?>
Ovviamente se è giusto 50 x 76 e la frase finale non ha il punto devi 
effettuare qualche modifica. Il principio comunque rimane valido.
----
Le proposte sono sempre capite dagli altri in maniera diversa da come le 
concepisce chi le fa.

 ha scritto nel messaggio news:bikqd6$aghh7$1...@ID-195894.news.uni-berlin.de...

Salve,
preg_match_all("|([\w]+) ?[.] ?|siU", $text, $m);
i risultati sono in $m[1];
e devi tuttavia fare un'ulteriore restrizione
però questo non da Remax2000 e sopratutto becca anche 100
un po più articolato ma funzionante
$arr = preg_split("| ?[.] ?|si", $text);
 while(list($k, $v) = each ($arr)) {
    $a[$k] = explode(' ', trim($v));
    $e[$k] = array_pop($a[$k]);
    !preg_match("|[\W]+|i", $e[$k]) ? $end[] = $e[$k] : '';
 }
/* cio che ti serve si trova in $end */
 echo '<pre>';
 var_dump($end);
 echo '</pre>';
Saluti
Corrado Modica
www.pachinoglobale.com