1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
|
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- EN-Revision: 1.37 Maintainer: darvin Status: ready -->
<reference id="ref.regex">
<title>Funzioni per le espressioni regolari (POSIX estesa)</title>
<titleabbrev>Regexp</titleabbrev>
<partintro>
<note>
<para>
Il PHP, utilizzando le <link linkend="ref.pcre">funzioni PCRE</link>,
supporta anche le espressioni regolari con una sintassi compatibile con Perl.
Queste funzioni supportano riconoscimenti "pigliatutto", asserzioni, criteri condizionali,
e diverse altre caratteristiche che non sono supportate dalla sintassi POSIX estesa.
</para>
</note>
<warning>
<para>
Queste funzioni per l'espressioni regolari non sono binary-safe. Le <link
linkend="ref.pcre">funzioni PCRE</link> lo sono.
</para>
</warning>
<para>
In PHP, le espressioni regolari sono utilizzate per complesse
manipolazioni di stringhe. Le funzioni che supportano le espressioni
regolari sono:
<itemizedlist>
<listitem>
<simpara><function>ereg</function></simpara>
</listitem>
<listitem>
<simpara><function>ereg_replace</function></simpara>
</listitem>
<listitem>
<simpara><function>eregi</function></simpara>
</listitem>
<listitem>
<simpara><function>eregi_replace</function></simpara>
</listitem>
<listitem>
<simpara><function>split</function></simpara>
</listitem>
<listitem>
<simpara><function>spliti</function></simpara>
</listitem>
</itemizedlist>
Tutte queste funzioni usano una espressione regolare come loro
primo argomento. Le espressioni regolari utilizzate da PHP sono di tipo
POSIX esteso cos come definito in POSIX 1003.2. Per una descrizione
completa delle espressione regolari POSIX, vedere la pagina del
manuale di regex inclusa nella directory di regex nella distribuzione
di PHP. Questa in formato man, pertanto per poterle leggere occorre
eseguire <command>man /usr/local/src/regex/regex.7</command>.
</para>
<para>
<example>
<title>Esempi di espressione regolare</title>
<programlisting role="php">
<![CDATA[
ereg ("abc", $string);
/* Restituisce vero se "abc"
viene trovata ovunque in $string. */
ereg ("^abc", $string);
/* Restituisce vero se "abc"
viene trovata all'inizio di $string. */
ereg ("abc$", $string);
/* Restituisce vero se "abc"
viene trovata alla fine di $string. */
eregi ("(ozilla.[23]|MSIE.3)", $HTTP_USER_AGENT);
/* Restituisce vero se il browser
Netscape 2, 3 oppure MSIE 3. */
ereg ("([[:alnum:]]+) ([[:alnum:]]+) ([[:alnum:]]+)", $string,$regs);
/* Posizione tre parole separate da spazio
in $regs[1], $regs[2] e $regs[3]. */
$string = ereg_replace ("^", "<br />", $string);
/* Posiziona il tag <br /> all'inizio di $string. */
$string = ereg_replace ("$", "<br />", $string);
/* Posiziona il tag <br /> alla fine di $string. */
$string = ereg_replace ("\n", "", $string);
/* Toglie ogni carattere di invio
da $string. */
]]>
</programlisting>
</example>
</para>
</partintro>
<refentry id="function.ereg">
<refnamediv>
<refname>ereg</refname>
<refpurpose>Riconoscimento di espressione regolare</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>int</type><methodname>ereg</methodname>
<methodparam><type>string</type><parameter>epressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>regs</parameter></methodparam>
</methodsynopsis>
<note>
<para>
Poich utilizza espressioni regolari con sintassi compatibile
con PERL, <function>preg_match</function>, spesso una alternativa
pi veloce a <function>ereg</function>.
</para>
</note>
<simpara>
Ricerca in <parameter>stringa</parameter> testi che possano incrociarsi
con l'espressione regolare indicata in <parameter>espressione_regolare</parameter>.
</simpara>
<simpara>
Se le parti di testo poste tra parentesi nel campo
<parameter>espressione_regolare</parameter> sono incontrate nella
<parameter>stringa</parameter> e la funzione viene chiamata utilizzando
il terzo parametro <parameter>regs</parameter>, il testo riconosciuto
sar memorizzato nella matrice <parameter>regs</parameter>.
L'indice 1, $regs[1], conterr la sottostringa che parte dalla prima
parentesi sinistra; $regs[2] conterr la sottostringa a partire dalla
seconda e cos via. L'indice 0, $regs[0], conterr la copia completa
della stringa riconosciuta.
</simpara>
<note>
<simpara>
Fino alla versione di PHP 4.1.0 compresa, <literal>$regs</literal>
conterr esattamente 10 elementi, anche se il numero delle stringhe
riconosciute sia maggiore o minore di 10. Ci non limita
<function>ereg</function> nella ricerca di pi sottostringhe.
Se non si riconoscono testi, <literal>$regs</literal> non
sar modificato da <function>ereg</function>.
</simpara>
</note>
<simpara>
La ricerca sensibile alle lettere maiuscole e minuscole.
</simpara>
<simpara>
La funzione ritorna &true; se le ricerche previste da
<parameter>espressione_regolare</parameter> sono riscontrate in
<parameter>stringa</parameter>. Viene restituito &false; se non
si hanno riscontri, oppure si verificano degli errori.
</simpara>
<para>
Nel seguente frammento di codice, una data in formato
ISO (YYYY-MM-DD) verr visualizzata nel formato DD.MM.YYYY:
<example>
<title><function>ereg</function> Esempio</title>
<programlisting role="php">
<![CDATA[
if (ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $data, $regs)) {
echo "$regs[3].$regs[2].$regs[1]";
} else {
echo "Formato di data non valido: $data";
}
]]>
</programlisting>
</example>
</para>
<simpara>
Vedere anche <function>eregi</function>,
<function>ereg_replace</function>,
<function>eregi_replace</function> e
<function>preg_match</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.ereg-replace">
<refnamediv>
<refname>ereg_replace</refname>
<refpurpose>Sostituzioni con espressioni regolari</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>ereg_replace</methodname>
<methodparam><type>string</type><parameter>espressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>testo_sostitutivo</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
</methodsynopsis>
<note>
<para>
Poich utilizza espressioni regolari con sintassi compatibile
con Perl, <function>preg_replace</function>, spesso una alternativa
pi veloce a <function>ereg_replace</function>.
</para>
</note>
<simpara>
La funzione ricerca all'interno del parametro <parameter>stringa</parameter>
sottostringhe che incrocino con le condizioni specificate in <parameter>
espressione_regolare</parameter>. Quando sono trovate, queste vengono sostituite
con il testo specificato in <parameter>testo_sostitutivo</parameter>.
</simpara>
<simpara>
La funzione restituisce la stringa modificata. (Ci implica
che se non ci sono sottostringhe che soddisfino l' espressione
regolare, la funzione restituisce la stringa originaria).
</simpara>
<simpara>
Se in <parameter>espressione_regolare</parameter> si specificano
delle sottostringhe utilizzando le parentesi, anche nel campo
<parameter>testo_sostitutivo</parameter> si possono specificare delle
sottostringhe di formato <literal>\\<replaceable>digit</replaceable>
</literal>, che saranno sostituite dalle stringhe soddisfacenti
la digit'esima condizione posta tra parentesi; <literal>\\0</literal>
indica l'intera stringa. La funzione prevede che si possano utlizzare
fino a nove sottostringhe. E' previsto che le parentesi siano
nidificate, in questo caso il conteggio si basa sulle parentesi aperte.
</simpara>
<simpara>
Se nessuna parte di <parameter>stringa</parameter> viene riconosciuta,
il parametro viene restituito invariato.
</simpara>
<para>
Come esempio il seguente frammento di codice visualizzer la frase
"Questo fu un test" tre volte:
<example>
<title><function>ereg_replace</function> Esempio</title>
<programlisting>
<![CDATA[
$stringa = "Questo un test";
echo ereg_replace (" ", " fu", $string);
echo ereg_replace ("( )", "\\1fu", $string);
echo ereg_replace ("(( ))", "\\2fu", $string);
]]>
</programlisting>
</example>
</para>
<para>
Un aspetto a cui occorre prestare attenzione riguarda l'uso di
numero intero per il parametro <parameter>testo_sostitutivo</parameter>,
si potrebbero ottenere risultati diversi da quanto atteso.
Questo accade perch la funzione <function>ereg_replace</function>
interpreta il numero come posizione ordinale di un carattere
comportandosi di conseguenza. Ad esempio:
<example>
<title><function>ereg_replace</function> Esempio</title>
<programlisting>
<![CDATA[
<?php
/* Questo non si comporta come atteso. */
$num = 4;
$stringa = "Questa stringa ha quattro parole.";
$stringa = ereg_replace('quattro', $num, $stringa);
echo $stringa; /* Risultato: 'Questa stringa ha parole.' */
/* Questo funziona. */
$num = '4';
$stringa = "Questa stringa ha quattro parole.";
$stringa = ereg_replace('quattro', $num, $stringa);
echo $stringa; /* Risultato: 'Questa stringa ha 4 parole' */
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>Sostituzione di URLs</title>
<programlisting role="php">
<![CDATA[
$testo = ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]",
"<a href=\"\\0\">\\0</a>", $testo);
]]>
</programlisting>
</example>
</para>
<simpara>
Vedere anche <function>ereg</function>, <function>eregi</function>,
<function>eregi_replace</function>, <function>str_replace</function>, e <function>preg_match</function>.
</simpara>
</refsect1>
</refentry>
<refentry id="function.eregi">
<refnamediv>
<refname>eregi</refname>
<refpurpose>Riconoscimento di espressioni regolari senza distinzione tra maiuscole e minuscole</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>int</type><methodname>eregi</methodname>
<methodparam><type>string</type><parameter>espressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>regs</parameter></methodparam>
</methodsynopsis>
<para>
Questa funzione identica a <function>ereg</function>, tranne
che per il fatto che non distingue tra lettere maiuscole e lettere
minuscole.
<example>
<title><function>eregi</function> esempio</title>
<programlisting role="php">
<![CDATA[
if (eregi("z", $stringa)) {
echo "'$stringa' contiene una 'z' oppure una 'Z'!";
}
]]>
</programlisting>
</example>
</para>
<para>
Vedere anche <function>ereg</function>,
<function>ereg_replace</function>, e
<function>eregi_replace</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.eregi-replace">
<refnamediv>
<refname>eregi_replace</refname>
<refpurpose>Sostituzioni con espressioni regolari senza distinzione tra maiuscole e minuscole</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>eregi_replace</methodname>
<methodparam><type>string</type><parameter>espressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>testo_sostitutivo</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
</methodsynopsis>
<para>
Questa funzione identica a <function>ereg_replace</function>, tranne
che per il fatto che non distingue tra lettere maiuscole e lettere
minuscole.
</para>
<para>
Vedere anche <function>ereg</function>, <function>eregi</function>
e <function>ereg_replace</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.split">
<refnamediv>
<refname>split</refname>
<refpurpose>Suddivide una stringa in una matrice utilizzando le espressioni regolari</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>array</type><methodname>split</methodname>
<methodparam><type>string</type><parameter>espressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>limite</parameter></methodparam>
</methodsynopsis>
<note>
<para>
Poich utilizza espressioni regolari con sintassi compatibile
con Perl, <function>preg_split</function>, spesso una alternativa
pi veloce a <function>split</function>.
</para>
</note>
<para>
La funzione restituisce una matrice di stringhe che sono delle
sottostringhe del parametro <parameter>stringa</parameter>. Queste
sono ottenute suddividendo il parametro secondo i limiti indicati
dal parametro <parameter>espressione_regolare</parameter>. Se viene
specificato il parametro <parameter>limite</parameter>, la funzione
restituisce una matrice con un numero di elementi al massimo pari
a <parameter>limite</parameter>. L'ultimo elemento della matrice contiene
la parte restante del parametro <parameter>stringa</parameter> fornito.
Se si verificano errori la funzione <function>split</function>
restituisce &false;.
</para>
<para>
Esempio di come estrapolare i primi 4 campi da una linea del file
<filename>/etc/passwd</filename>:
<example>
<title><function>split</function> Esempio</title>
<programlisting role="php">
<![CDATA[
list($user,$pass,$uid,$gid,$extra)= split (":", $passwd_line, 5);
]]>
</programlisting>
</example>
</para>
<tip>
<simpara>
Se nella stringa passata vi sono <replaceable>n</replaceable> occorrenze
del parametro <parameter>espressione_regolare</parameter>, la matrice restituita
conterr <literal><replaceable>n</replaceable>+1</literal> elementi.
Invece, nel caso in cui non vi siano occorrenze della
<parameter>espressione_regolare</parameter>, la matrice restituita conterr
un solo elemento. Ovviamente questo valido anche nel caso in cui il
parametro <parameter>stringa</parameter> vuoto.
</simpara>
</tip>
<para>
Nell'esempio che segue, si vedr come analizzare una data il cui testo
pu contenere barre, punti o trattini:
<example>
<title><function>split</function> Esempio</title>
<programlisting role="php">
<![CDATA[
$data = "04/30/1973"; // Delimitatori di testo: barre, punti, trattini
list ($mese, $giorno, $anno) = split ('[/.-]', $data);
echo "Mese: $mese; Giorno: $giorno; Anno: $anno<br>\n";
]]>
</programlisting>
</example>
</para>
<para>
Fare attenzione al fatto che <parameter>espressione_regolare</parameter> distingue
tra lettere maiuscole e minuscole.
</para>
<para>
Nota: se non richiesta la potenza delle espressioni regolari,
pi veloce la funzione <function>explode</function>, la quale
non richiede l'uso del motore delle espressioni regolari.
</para>
<para>
Gli utenti che cercano un modo di emulare il comportamento di
Perl <command>$chars = split('', $str)</command>, sono rimandati
agli esempi di <function>preg_split</function>.
</para>
<para>
Occorre fare attenzione al fatto che il parametro <parameter>
espressione_regolare</parameter> una espressione regolare e,
pertanto, se si devono riconoscere caratteri che sono considerati
speciali per le espressioni regolari, occorre codificarli con i
caratteri di escape. Se si ritiene che la funzione <function>split
</function> ( o anche le altre funzioni derivate da regex ) si
comportino in modo anomalo, opportuno leggere il file
<filename>regex.7</filename>, incluso nella cartella <filename>
regex/</filename> della distribuzione di PHP. Questo file
nel formato del manuale di unix (man), pertanto per visualizzarlo
occorre eseguire il comando <command>man
/usr/local/src/regex/regex.7</command>.
</para>
<para>
Vedere anche:
<function>preg_split</function>,
<function>spliti</function>,
<function>explode</function>,
<function>implode</function>,
<function>chunk_split</function> e
<function>wordwrap</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.spliti">
<refnamediv>
<refname>spliti</refname>
<refpurpose>
Suddivide una stringa in una matrice usando le espressioni regolari senza distinguere tra
maiuscole e minuscole
</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>array</type><methodname>spliti</methodname>
<methodparam><type>string</type><parameter>espressione_regolare</parameter></methodparam>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>limite</parameter></methodparam>
</methodsynopsis>
<para>
Questa funzione ha un comportamento identico a <function>split</function>
tranne che per il fatto di non distinguere tra lettere maiuscole e minuscole.
</para>
<para>
Vedere anche
<function>preg_spliti</function>,
<function>split</function>,
<function>explode</function>
e <function>implode</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.sql-regcase">
<refnamediv>
<refname>sql_regcase</refname>
<refpurpose>
Genera una espressione regolare per riconoscimenti senza distinguere tra maiuscole e minuscole
</refpurpose>
</refnamediv>
<refsect1>
<title>Descrizione</title>
<methodsynopsis>
<type>string</type><methodname>sql_regcase</methodname>
<methodparam><type>string</type><parameter>stringa</parameter></methodparam>
</methodsynopsis>
<para>
La funzione restituisce una espressione regolare che
sia in grado di riconoscere il parametro <parameter>
stringa</parameter>, a prescindere dalle lettere maiuscole
minuscole. L'espressione regolare restituita corrisponde
a <parameter>string</parameter> con ciascun carattere riportato
tra parentesi. Ogni parentesi contiene il singolo carattere
in maiuscolo ed in minuscolo. Se il carattere non esiste in forma
minuscola o maiuscola, il carattere originale vie riportato due volte.
<example>
<title><function>sql_regcase</function> Esempio</title>
<programlisting role="php">
<![CDATA[
echo sql_regcase ("Foo bar");
]]>
</programlisting>
</example>
visualizza <screen>[Ff][Oo][Oo] [Bb][Aa][Rr]</screen>.
</para>
<para>
Questa funzione torna utile quando si devono ottenere espressioni regolari
non distinguono tra lettere maiuscole e minuscole da passare a prodotti che
supportano espressioni regolari che distinguono il tipo di lettera.
</para>
</refsect1>
</refentry>
</reference>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->
|