[Php-it] [PREG] riconoscere testo racchiuso

Domenico L. domenico.lorusso at pleiade.it
Tue Nov 7 12:19:30 CET 2006


ciao ragazzi,
dato questo testo:

	{nome}
	{cognome||constraints=>required,string} 
	{cittaNascita||label=>a ||group=>nascita} 
	{dataNascita||label=> il (gg/mm/yyyy) ||group=>nascita||constraints=>date}
	{nascita||label=>nato}
	{professione||
		type=>select||
		options=>0:informatico,1:meccanico,2:consulente finanziario,3:nulla facente}
	{redditoAnnuo||constraints=>numeric}
	{testoReddito||
		type=>relatedValue||
		value=>professione||
		options=>0: che guadagna $redditoAnnuo all'anno.
			,1: che più di $redditoAnnuo all'anno.
			,2: che meno di $redditoAnnuo all'anno.
			,3:.}

	{testoNumerico||outValuate=>e-val:
$valore=trim($valore);
if (preg_match('§^[0-9]\{1,2\}([\\ -/.])[0-9]\{1,2\}\1[0-9]\{2,4\}$§sUD',$valore)
	return $valore;
else return date('d/m/Y');
}

vorrei ottenre in un array il testo racchiuso tra le graffe, senza le 
graffe, ora è possibile che all'interno delle graffe ci sia la necessità 
di utilizzarle per questo motivo deve essere possibile l'escaping:

questo è il codice (le graffe sono il default ma uno potrebbe usare 
qualsiasi carattere)
$_openVariableChar='{';
$_closeVariableChar='}';

        $oChar=preg_quote($_openVariableChar,'/');
        $cChar=preg_quote($_closeVariableChar,'/');
        $bslah=preg_quote('\\');
        
$er="/(?<!$bslah)$oChar(\w+((?<=$bslah)$oChar|(?<=$bslah)$cChar|[^{$_closeVariableChar}])*)$cChar/sUD";
        #echo '<pre>'.htmlentities($er)."\n------\n$a</pre>";

Che funziona anche bene se non c'è nidificazione, ma ne caso 
dell'ultimva "variabile" (testoNumerico) il riconoscitore si interrompe 
alla prima } che incontra quella dopo 1,2\

Sapete dirmi dove sbaglio?

ciao e grazie



-- 
Domenico L.                             icq: 645 44 861

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



More information about the Php-it mailing list