File: regex.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (550 lines) | stat: -rw-r--r-- 20,637 bytes parent folder | download
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
-->