cvs: phpdoc /hu/functions funchand.xml math.xml pcre.xml
| From: | Gabor Hojtsy | Date: | Fri, 07 Dec 2001 15:52:53 +0000 |
| Subject: | cvs: phpdoc /hu/functions funchand.xml math.xml pcre.xml | ||
| Groups: | php.doc | ||
| Request: | Send a blank email to phpdoc+get-969339525@lists.php.net to get a copy of this message | ||
goba Fri Dec 7 10:52:53 2001 EDT
Modified files:
/phpdoc/hu/functions funchand.xml math.xml pcre.xml
Log:
Adding new translations from Gyozo Papp
Index: phpdoc/hu/functions/funchand.xml diff -u /dev/null phpdoc/hu/functions/funchand.xml:1.4 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/funchand.xml Fri Dec 7 10:52:49 2001 @@ -0,0 +1,628 @@ +<?xml encoding="iso-8859-2" version="1.0"?> +<!-- EN-Revision: 1.18 Maintainer: pgerzson Status: ready --> + <reference id="ref.funchand"> + <title>Függvénykezelõ függvények</title> + <titleabbrev>Függvénykezelés</titleabbrev> + + <partintro> + <para> + E függvények mindegyike különféle, a PHP függvényekhez szorosan + kapcsolodó mûveletekben segédkezik. + </para> + </partintro> + + <refentry id="function.call-user-func-array"> + <refnamediv> + <refname>call_user_func_array</refname> + <refpurpose> + Felhasználói függvényt hív meg a paraméterek egy tömbjével + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed + <function>call_user_func_array</function> + </funcdef> + <paramdef>string + <parameter>function_name</parameter> + </paramdef> + <paramdef>array + <parameter><optional>paramarr</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>function_name</parameter>-ban megadott nevû felhasználói + függvényt hívja meg <parameter>paramarr</parameter>-ben megadott + paraméterekkel. + Például: + <informalexample> + <programlisting role="php"> +function debug($var, $val) + echo "***Bogarásszunk\nVÁLTOZÓ: $var\nÉRTÉKE:"; + if (is_array($val) || is_object($val) || is_resource($val)) + print_r($val); + else + echo "\n$val\n"; + echo "***\n"; +} + +$c = mysql_connect(); +$host = $HTTP_SERVER_VARS["SERVER_NAME"]; + +call_user_func_array ('debug', array("host", $host)); +call_user_func_array ('debug', array("c", $c)); +call_user_func_array ('debug', array("HTTP_POST_VARS", $HTTP_POST_VARS)); + </programlisting> + </informalexample> + </para> + <para> + Lásd még: + <function>call_user_func</function>, + <function>call_user_method</function> és + <function>call_user_method_array</function>! + </para> + <note> + <para> + Ez a függvény a PHP 4.0.4pl1 kiadása után került a CVS-be. + </para> + </note> + </refsect1> + </refentry> + + <refentry id="function.call-user-func"> + <refnamediv> + <refname>call_user_func</refname> + <refpurpose> + Felhasználói függvényt hív meg. + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed + <function>call_user_func</function> + </funcdef> + <paramdef>string + <parameter>function_name</parameter> + </paramdef> + <paramdef>mixed + <parameter><optional>parameter</optional></parameter> + </paramdef> + <paramdef>mixed + <parameter><optional>...</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>function_name</parameter>-ban megadott nevû felhasználói + függvényt hívja meg. Az ezután álló <parameter>parameter</parameter> + paraméterek a megadott sorrendben lesznek átadva a meghívott függvénynek. + Nézzük a kövekezõ példát: + <informalexample> + <programlisting role="php"> +function brobely ($type) { + print " Szóval $type akar, semmi gond."; +} +call_user_func ('barber', "gomba frizurát"); +call_user_func ('barber', "nyírást"); + </programlisting> + </informalexample> + </para> + <para> + Lásd még: + <function>call_user_func_array</function>, + <function>call_user_method</function> és + <function>call_user_method_array</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.create-function"> + <refnamediv> + <refname>create_function</refname> + <refpurpose>Név nélküli (lambda típusú) függvényt definiál</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>create_function</function></funcdef> + <paramdef>string <parameter>args</parameter></paramdef> + <paramdef>string <parameter>code</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az átadott paraméterek alapján egy anonim - név nélküli függvényt hoz létre. + Az <parameter>args</parameter> paramétert általában egyszeres idézõjelek + közt szokás átadni, és ez ajánlott a <parameter>code</parameter>-ra is. + Ennek az az oka, hogy így az egyszeres idézõjelek közé fogott sztringekre + nem aktiválódik a változó-behelyettesítés, máskülönben macskakörmök + használata esetén a változó neveket visszaperjelezned kellene, mint például: + <literal>\$avar</literal>. + </para> + <para> + Ezzel a függvénnyel - például futási idõben nyert információk alapján - + definiálhatsz új függvényeket: + <example> + <title> + A <function>create_function</function> segítségével definiált függvények + </title> + <programlisting role="php"> +$ujfgv = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);'); +echo "Új névtelen függvényünk: $ujfgv\n"; // azért valami neve csak van :) +echo $ujfgv(2,M_E)."\n"; +// eredménye +// Új névtelen függvényünk: lambda_1 +// ln(2) + ln(2.718281828459) = 1.6931471805599 + </programlisting> + </example> + Vagy egy általános kezelõfüggvény megléte esetén mûveletek sorozata alkalmazható + egy adott paraméterlistára, pl: + <example> + <title> + Általános feldolgozó függvény létrehozása + <function>create_function</function>-nel. + </title> + <programlisting role="php"> +function feldolgoz($valtozo1, $valtozo2, $fvtomb) { + for ($f=0; $f < count($fvtomb); $f++) + echo $fvtomb[$f]($valtozo1,$valtozo2)."\n"; +} + +// egy csomó matematikai függvény létrehozása +$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'; +$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"; +$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b;} else {return false;}'; +$fv_tomb = array( + create_function('$x,$y', 'return "ezt nem tudom mi: ".(sin($x) + $x*cos($y));'), + create_function('$x,$y', 'return "az átfogó: ".sqrt($x*$x + $y*$y);'), + create_function('$a,$b', $f1), + create_function('$a,$b', $f2), + create_function('$a,$b', $f3) + ); + +echo "\nAz elso tomb anonim fuggvenyekkel\n"; +echo "parameterek: 2.3445, M_PI\n"; +feldolgoz(2.3445, M_PI, $fv_tomb); + +// most egy csomó sztringkezelõ függvény létrehozása +$fv_tomb2 = array( + create_function('$b,$a','if (strncmp($a,$b,3) == 0) return "** \"$a\" '. + 'es \"$b\"\n** nekem azonosnak tunik! (az elso 3 karakter utan)";'), + create_function('$a,$b','; return "CRCs: ".crc32($a)." , ".crc32(b);'), + create_function('$a,$b','; return "similar(a,b) = ".similar_text($a,$b,&$p)."($p%)";') + ); +echo "\nA masodik tomb anonim fuggvenyekkel\n"; +feldolgoz("Twas brilling and the slithy toves", "Twas the night", $fv_tomb2); + </programlisting> + </example> + and when you run the code above, the output will be: + <informalexample> + <programlisting> +Az elso tomb anonim fuggvenyekkel +parameterek: 2.3445, M_PI +ezt nem tudom mi: -1.6291725057799 +az átfogó: 3.9199852871011 +b*a^2 = 4.8103313314525 +min(b^2+a, a^2,b) = 8.6382729035898 +ln(a/b) = 0.27122299212594 + +A masodik tomb anonim fuggvenyekkel +** "Twas the night" and "Twas brilling and the slithy toves" +** nekem azonosnak tunik! (az elso 3 karakter utan) +CRCs: -725381282 , 1908338681 +similar(a,b) = 11(45.833333333333%) + </programlisting> + </informalexample> + Valószínûleg az anonim függvények legáltalánosabb felhasználási módja az + ún. 'callback' függvények létrehozása, pl. az <function>array_walk</function> vagy + az <function>usort</function> számára. + <example> + <title>Anonim függvények használata 'callback' függvényként</title> + <programlisting role="php"> +$nevelok = array("a ","egy ","az ","ez "); +array_walk($nevelok, create_function('&$v,$k','$v = $v."mango";')); +print_r($av); // PHP 3-soknak var_dump() +// kiirja, hogy : +// Array +// ( +// [0] => a mango +// [1] => egy mango +// [2] => az mango +// [3] => ez mango +// ) + +// szrtinggel teli tömb a rövidebbtõl a hosszabb felé rendezve +$sv = array("rovid","hosszabb","egy nagy string","ez valami sztring dolog"); +print_r($sv); +// kiírja, hogy: +// Array +// ( +// [0] => rovid +// [1] => hosszabb +// [2] => egy nagy sztring +// [3] => ez valami sztring dolog +// ) + +// hosszúság szerinti csökkenõ sorrendben rendezve: +usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);')); +print_r($sv); +// kiírja, hogy: +// Array +// ( +// [0] => ez valami sztring dolog +// [1] => egy nagy sztring +// [2] => hosszabb +// [3] => rovid +// ) + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.func-get-arg"> + <refnamediv> + <refname>func_get_arg</refname> + <refpurpose>Visszaadja a paraméter lista egy elemét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>func_get_arg</function></funcdef> + <paramdef>int <parameter>arg_num</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Visszadja a függvénynek átadott paraméterlista <parameter>arg_num</parameter>. + helyén álló paramétert. A paraméterek számozása 0-tól kezdõdik. + A <function>func_get_arg</function> "nem fatális" hibát (warning) jelez, + ha függvényen kívül hívod meg. + </simpara> + <simpara> + Ha az <parameter>arg_num</parameter> a pillanatnyilag átadott paraméterek + számánál nagyobb, akkor egy "nem fatális" hiba (warning) generálódik és a + <function>func_get_arg</function> &false;-szal tér vissza. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function ize() { + $parameterek_szama = func_num_args(); + echo "argumentumok száma: {$parameterek_szama}<br>\n"; + if ($parameterek_szama >= 2) { + echo "A második paraméter: " . func_get_arg (1) . "<br>\n"; + } +} + +ize (1, 2, 3); +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_get_arg</function> a <function>func_num_args</function> + és a <function>func_get_args</function> függvényekkel együtt olyan + függvények írását segítik elõ, amelyek különbözõ hosszúságú + paraméterlistákat képesek kezelni. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.func-get-args"> + <refnamediv> + <refname>func_get_args</refname> + <refpurpose> + Visszatér a függvénynek átadott paramétereket tartalmazó tömbbel + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>func_get_args</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaad egy tömböt az aktuális függvénynek átadott paraméterekkel. + A <function>func_get_args</function> "nem fatális" hibát (warning) jelez, + ha függvénydefiníción kívül hívod meg. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function foo() { + $pm_szama = func_num_args(); + echo "A parameterek szama: {$pm_szama}<br>\n"; + if ($pm_szama >= 2) { + echo "A masodik parameter: " . func_get_arg (1) . "<br>\n"; + } + $pm_lista = func_get_args(); + for ($i = 0; $i < $pm_szama; $i++) { + echo "$i. parameter : " . $pm_lista[$i] . "<br>\n"; + } +} + +foo (1, 2, 3); +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_get_args</function>-t a <function>func_get_arg</function> és + <function>func_num_args</function> függvényekkel együtt használva a felhasználói + függvények is képesek kezelni a változó hosszúságú paraméterlistákat. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.func-num-args"> + <refnamediv> + <refname>func_num_args</refname> + <refpurpose> + Visszaadja a függvénynek átadott paraméterek számát + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>func_num_args</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaadja az aktuális függvénynek átadott paraméterek számát. + A <function>func_num_args</function> "nem fatális" hibát (warning) jelez, + ha függvénydefiníción kívül hívod meg. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function ize() { + $pm_szama = func_num_args(); + echo "A parameterek szama: {$pm_szama}\n"; +} + +foo (1, 2, 3); // azt írja ki: 'A parameterek szama: 3' +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_num_args</function>-t a <function>func_get_arg</function> és + <function>func_get_args</function> függvényekkel együtt használva a felhasználói + függvények is képesek kezelni a változó hosszúságú paraméterlistákat. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.function-exists"> + <refnamediv> + <refname>function_exists</refname> + <refpurpose> + &true;-val tér vissza, ha az adott nevû függvény definiálva van + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>bool <function>function_exists</function></funcdef> + <paramdef>string <parameter>function_name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A definiált függvények listájában megkeresi a <parameter>function_name</parameter> nevût, + és &true;-val tér vissza, ha az adott nevû függvényt megtalálta, egyébként &false;-szal. + <informalexample> + <programlisting role="php"> +if (function_exists('imap_open')) { + echo "IMAP függvények használhatók.<br>\n"; +} else { + echo "IMAP függvények _nem_ használhatók.<br>\n"; +} + </programlisting> + </informalexample> + Vigyázz, mert egy függvény neve létezhet, még akkor is ha a függvény maga nem használható + valamilyen konfigurációs vagy fordítási beálltás következtében. + </para> + <para> + See also <function>method_exists</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.get-defined-functions"> + <refnamediv> + <refname>get_defined_functions</refname> + <refpurpose> + visszatér az összes definiált függvény nevével + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>get_defined_functions</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény egy többdimenziós tömböt ad vissza, amelyben mind a beépített + mind a felhasználó által definiált függvények nevei szereplnek. A beépített + függvények nevei <varname>$arr["internal"]</varname>-n keresztül érhetõk el, + amelyeket a felhasználó definiált pedig a <varname>$arr["user"]</varname>-n keresztül. + (lásd a lenti példát) + <informalexample> + <programlisting role="php"> +function az_en_sorom($id, $adat) { + return "<tr><th>$id</th><td>$adat</td></tr>\n"; +} + +$arr = get_defined_functions(); + +print_r($arr); + </programlisting> + </informalexample> + </para> + <para> + valami hasonlót fog kírni: + <informalexample> + <programlisting> +Array +( + [internal] => Array + ( + [0] => zend_version + [1] => func_num_args + [2] => func_get_arg + [3] => func_get_args + [4] => strlen + [5] => strcmp + [6] => strncmp + ... + [750] => bcscale + [751] => bccomp + ) + + [user] => Array + ( + [0] => az_en_sorom + ) + +) + </programlisting> + </informalexample> + </para> + <para> + See also <function>get_defined_vars</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.register-shutdown-function"> + <refnamediv> + <refname>register_shutdown_function</refname> + <refpurpose> + Regiszrálja a függvényt a szkript befejezésekor történõ végrehajtásra + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int + <function>register_shutdown_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A <parameter>func</parameter> nevû függvényt regisztrálja, + hogy az majd a szkript feldolgozása után lefusson.</simpara> + <para> + Gyakori hiba: + </para> + <simpara> + Mivel ebben a függvényben semmilyen adatot nem küldhetsz már a kliens felé, + ezért hibakeresés gyanánt nem használhatsz olyan utasításokat, + mint a print vagy az echo. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.register-tick-function"> + <refnamediv> + <refname>register_tick_function</refname> + <refpurpose> + Regisztrálja a függvényt a tick eseményhez + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void + <function>register_tick_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + <paramdef>mixed <parameter><optional>arg</optional></parameter>...</paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Regisztrálja a <parameter>func</parameter> nevû függvényt, hogy az meghívásra kerüljön + minden egyes <link linkend="control-structures.declare">tick</link> bekövetkeztekor. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.unregister-tick-function"> + <refnamediv> + <refname>unregister_tick_function</refname> + <refpurpose> + Megszünteti a függvény futtatását mindenegyes tick bekövetkeztekor + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void + <function>unregister_tick_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + <paramdef>mixed <parameter><optional>arg</optional></parameter>...</paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A <parameter>func</parameter> nevû függvényt kiiktatja, hogy az ne fusson le, amikor egy <link + linkend="control-structures.declare">tick</link> esemény bekövetkezik.</simpara> + </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 +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 +--> Index: phpdoc/hu/functions/math.xml diff -u /dev/null phpdoc/hu/functions/math.xml:1.5 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/math.xml Fri Dec 7 10:52:49 2001 @@ -0,0 +1,1236 @@ +<?xml version="1.0" encoding="iso-8859-2" ?> +<!-- EN-Revision: 1.55 Maintainer: pgerzson Status: ready --> + <reference id="ref.math"> + <title>Matematikai függvények</title> + <titleabbrev>Matematika</titleabbrev> + + <partintro> + <sect1 id="math.intro"> + <title>Elõszó</title> + <para> + Ezek a matematikai függvények csak a gépeden ábrázolható + <type>integer</type> és <type>float</type> típusok értéktartományába + esõ értkeket képes kezelni (ez jelenleg azonos a C beli long és double típusokéval) + Ha nagyobb számokat kell kezelni, akkor a nézd meg a <link + linkend="ref.bc">tetszõleges pontosságú matematikai függvényeket.</link>. + </para> + <sect2 id="math.constants"> + <title>Matematikai állandók</title> + <para> + Ez a matematikai kiterjesztés a következõ értékeket hozza létre a PHP-ban: + <table> + <title>Matematikai állandók</title> + <tgroup cols="3"> + <thead> + <row> + <entry>Állandó</entry> + <entry>Érték</entry> + <entry>Leírás</entry> + </row> + </thead> + <tbody> + <row> + <entry>M_PI</entry> + <entry>3.14159265358979323846</entry> + <entry>Pi</entry> + </row> + <row> + <entry>M_E</entry> + <entry>2.7182818284590452354</entry> + <entry>e</entry> + </row> + <row> + <entry>M_LOG2E</entry> + <entry>1.4426950408889634074</entry> + <entry>log_2 e</entry> + </row> + <row> + <entry>M_LOG10E</entry> + <entry>0.43429448190325182765</entry> + <entry>log_10 e</entry> + </row> + <row> + <entry>M_LN2</entry> + <entry>0.69314718055994530942</entry> + <entry>log_e 2</entry> + </row> + <row> + <entry>M_LN10</entry> + <entry>2.30258509299404568402</entry> + <entry>log_e 10</entry> + </row> + <row> + <entry>M_PI_2</entry> + <entry>1.57079632679489661923</entry> + <entry>pi/2</entry> + </row> + <row> + <entry>M_PI_4</entry> + <entry>0.78539816339744830962</entry> + <entry>pi/4</entry> + </row> + <row> + <entry>M_1_PI</entry> + <entry>0.31830988618379067154</entry> + <entry>1/pi</entry> + </row> + <row> + <entry>M_2_PI</entry> + <entry>0.63661977236758134308</entry> + <entry>2/pi</entry> + </row> + <row> + <entry>M_SQRTPI</entry> + <entry>1.77245385090551602729</entry> + <entry>sqrt(pi) [4.0.2]</entry> + </row> + <row> + <entry>M_2_SQRTPI</entry> + <entry>1.12837916709551257390</entry> + <entry>2/sqrt(pi)</entry> + </row> + <row> + <entry>M_SQRT2</entry> + <entry>1.41421356237309504880</entry> + <entry>sqrt(2)</entry> + </row> + <row> + <entry>M_SQRT3</entry> + <entry>1.73205080756887729352</entry> + <entry>sqrt(3) [4.0.2]</entry> + </row> + <row> + <entry>M_SQRT1_2</entry> + <entry>0.70710678118654752440</entry> + <entry>1/sqrt(2)</entry> + </row> + <row> + <entry>M_LNPI</entry> + <entry>1.14472988584940017414</entry> + <entry>log_e(pi) [4.0.2]</entry> + </row> + <row> + <entry>M_EULER</entry> + <entry>0.57721566490153286061</entry> + <entry>Euler constant [4.0.2]</entry> + </row> + </tbody> + </tgroup> + </table> + PHP 4RC1 verziójáig csak az M_PI használható. + Minden más állandó PHP 4.0-tól kezdve elérhetõ, kivéve amelyiknél a [4.0.2] címke olvasható: + ezek csak PHP 4.0.2-tól kezdve. + </para> + </sect2> + </sect1> + </partintro> + + <refentry id="function.abs"> + <refnamediv> + <refname>abs</refname> + <refpurpose>abszolút érték</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>abs</function></funcdef> + <paramdef>mixed <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A szám abszolút értékével tér vissza. Ha paraméterben átadott szám <type>float</type> típusú, + akkor a visszaadott érték is <type>float</type> típusú lesz, egyébként <type>integer</type>. + (mivel egy <type>float</type>-nak általában nagyobb az értéke, mint egy <type>integer</type>-nek). + </para> + </refsect1> + </refentry> + + <refentry id="function.acos"> + <refnamediv> + <refname>acos</refname> + <refpurpose>arkusz koszinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>acos</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ay <parameter>arg</parameter> arkusz koszinuszát adja vissza radiánban. + </para> + <para> + Lásd még: <function>asin</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.asin"> + <refnamediv> + <refname>asin</refname> + <refpurpose>arkusz szinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>asin</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> arkusz szinuszát adja vissza radiánban. + </para> + <para> + Lásd még: <function>acos</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.atan"> + <refnamediv> + <refname>atan</refname> + <refpurpose>arkusz tangens</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>atan</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>arg</parameter> arkusz tangensét adja vissza radiánban. + </para> + <para> + Lásd még: <function>asin</function> és <function>acos</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.atan2"> + <refnamediv> + <refname>atan2</refname> + <refpurpose>két változó arkusz tangense</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>atan2</function></funcdef> + <paramdef>float <parameter>y</parameter></paramdef> + <paramdef>float <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ez a függvény az <parameter>x</parameter> és <parameter>y</parameter> által meghatározott érték + arkusz tangensét adja vissza radiánban. Ez hasonló az <parameter>y</parameter> / <parameter>x</parameter> arkusz tangenséhez, + attól eltekintve hogy a paraméterek elõjele meghatározza, hogy az eredmény melyik körnegyedbe esik. + </simpara> + <simpara> + A függvény eredményét radiánban adja vissza, ami -PI és +PI közé esik (beleértve a határokat is). + </simpara> + <para> + Lásd még: <function>acos</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.base-convert"> + <refnamediv> + <refname>base_convert</refname> + <refpurpose>tetszõleges számrendszerbe vált át egy számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>base_convert</function></funcdef> + <paramdef>string <parameter>number</parameter></paramdef> + <paramdef>int <parameter>frombase</parameter></paramdef> + <paramdef>int <parameter>tobase</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter>-ben átadott számot váltja át a <parameter>tobase</parameter>-ben + megadott alapszámú számrendszerbe, és ezzel tér vissza. + A <parameter>number</parameter> alapszáma a <parameter>frombase</parameter>-ben adható meg. + Mind a <parameter>frombase</parameter> és <parameter>tobase</parameter> paraméternek 2 és 36 közé kell esnie. + A 10-nél nagyobb értékû számjegyeket betûkkel ábrázoljuk, ahol az "a" 10-et jelent, a "b" 11-et és a "z" 35-öt. + <example> + <title><function>base_convert</function></title> + <programlisting role="php"> +$binaris = base_convert ($hexadecimalis, 16, 2); +</programlisting> + </example> + </para> + </refsect1> + </refentry> + + + <refentry id="function.bindec"> + <refnamediv> + <refname>bindec</refname> + <refpurpose>binárisból tizes számrendszerbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>bindec</function></funcdef> + <paramdef>string <parameter>binary_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>binary_string</parameter> kettes számrendszerbeli (bináris) szám + tizes számrendszerbeli (decimális) megfelelõjét adja vissza. + </para> + <para> + A <function>bindec</function> függvény <type>integer</type> típusúvá konvertálja át a + bináris számot. Így a legnagyobb konvertálható szám a 31 db 1 bitbõll álló szám vagyis 2147483647 (10-es számrendszerben). + </para> + <para> + Lásd még: <function>decbin</function>! + function. + </para> + </refsect1> + </refentry> + + <refentry id="function.ceil"> + <refnamediv> + <refname>ceil</refname> + <refpurpose>törtrésszel bíró számot felfelé kerekíti</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>ceil</function></funcdef> + <paramdef>float <parameter>value</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha szükséges, akkor a következõ legnagyobb egész számmal tér vissza a <parameter>value</parameter>-t felfelé kerekítve. + A <function>ceil</function> által visszadott érték <type>float</type> típusú, mivel a <type>float</type> értékészlete + általában nagyobb, mint <type>int</type>-é. + </simpara> + <simpara> + Lásd még: <function>floor</function> és <function>round</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.cos"> + <refnamediv> + <refname>cos</refname> + <refpurpose>koszinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>cos</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiában megadott <parameter>arg</parameter> koszinuszát adja vissza. + </para> + <para> + Lásd még: <function>sin</function> és <function>tan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.decbin"> + <refnamediv> + <refname>decbin</refname> + <refpurpose>tízes számrendszerbõl kettesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>decbin</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> kettes számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami 31 db 1-esbõl álló sztringet eredményez. + </para> + <para> + Lásd még: <function>bindec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.dechex"> + <refnamediv> + <refname>dechex</refname> + <refpurpose>tízes számrendszerbõl tizenhatosba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>dechex</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> tizenhatos számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami "7fffffff"-et ad eredményül. + </para> + <para> + Lásd még: <function>hexdec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.decoct"> + <refnamediv> + <refname>decoct</refname> + <refpurpose>tízes számrendszerbõl nyolcasba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>decoct</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> nyolcas számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami "17777777777"-et ad eredményül. + </para> + <para> + Lásd még: <function>octdec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.deg2rad"> + <refnamediv> + <refname>deg2rad</refname> + <refpurpose>fokból radiánba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>deg2rad</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény a <parameter>number</parameter> paraméterben megadott fokokat radiánba váltja át. + </para> + <para> + Lásd még: <function>rad2deg</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.exp"> + <refnamediv> + <refname>exp</refname> + <refpurpose>e a(z) ... -re emelve </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>exp</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Visszaadja, hogy mennyivel egyenlõ az <literal>e</literal> az <parameter>arg</parameter>-ban megadott hatványon. + </para> + <para> + Lásd még: <function>pow</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.floor"> + <refnamediv> + <refname>floor</refname> + <refpurpose>lefelé kerekíti a törtrésszel bíró számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>floor</function></funcdef> + <paramdef>float <parameter>value</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha szükséges, akkor a megelõzõ legkisebb egész számmal tér vissza a <parameter>value</parameter>-t lefelé kerekítve. + A <function>floor</function> által visszadott érték <type>float</type> típusú, mivel a <type>float</type> értékészlete + általában nagyobb, mint <type>int</type>-é. + </simpara> + <simpara> + Lásd még: <function>ceil</function> és <function>round</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.getrandmax"> + <refnamediv> + <refname>getrandmax</refname> + <refpurpose>a legnagyobb lehetséges véletlen számot adja vissza</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>getrandmax</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + A legnagyobb lehetséges véletlen számot adja vissza, amit a <function>rand</function> meghívásakor visszaadhat. + </simpara> + <simpara> + Lásd még: <function>rand</function>, <function>srand</function>, + <function>mt_rand</function>, <function>mt_srand</function>, és + <function>mt_getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.hexdec"> + <refnamediv> + <refname>hexdec</refname> + <refpurpose>tizenhatos számrendszerbõl tízesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>hexdec</function></funcdef> + <paramdef>string <parameter>hex_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A tizenhatos számrendszerbeli <parameter>number</parameter> tízes számrendszerbeli megfelelõjével tér vissza. + A legnagyobb átváltható szám a 7fffffff, azaz 2147483647 (tízes számrendszerben). + </para> + <para> + A <function>hexdec</function> a <parameter>hex_string</parameter> nem hexadecimális karaktereit + <literal>0</literal>-ra cseréli, és így minden baloldali nullát figyelmen kívül hagy, de a + jobboldaliak beszámítanak az eredménybe. + <example> + <title><function>hexdec</function> példa</title> + <programlisting role="php"> +var_dump(hexdec("hee")); +var_dump(hexdec("ee")); +// mindketto: int(238) + +var_dump(hexdec("az")); +var_dump(hexdec("a0")); +// mindketto: int(160) + </programlisting> + </example> + </para> + <para> + Lásd még: <function>dechex</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.lcg-value"> + <refnamediv> + <refname>lcg_value</refname> + <refpurpose>Kombinált lineáris kongruencia generátor</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>lcg_value</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <para> + <function>lcg_value</function> returns a pseudo random number in + the range of (0, 1). The function combines two CGs with periods + of 2^31 - 85 and 2^31 - 249. The period of this function is equal + to the product of both primes. + + <!-- + A függvény két, 2^31 - 85 és 2^31 - 249 periódusú kongruenst kombinál, és a periódusa + ennek a két prímnek a szorzatával egyenlõ. + --> + </para> + </refsect1> + </refentry> + + <refentry id="function.log"> + <refnamediv> + <refname>log</refname> + <refpurpose>természetes alapú logaritmus</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>log</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> természetes (e) alapú logaritmusát adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.log10"> + <refnamediv> + <refname>log10</refname> + <refpurpose>tízes alapú logaritmus</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>log10</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> tízes alapú logaritmusát adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.max"> + <refnamediv> + <refname>max</refname> + <refpurpose>megkeresi a legnagyobb értéket</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>max</function></funcdef> + <paramdef>mixed <parameter>arg1</parameter></paramdef> + <paramdef>mixed <parameter>arg2</parameter></paramdef> + <paramdef>mixed <parameter>argn</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>max</function> a paraméterként átadott számként értelmezett értékek legnagyobbjával tér vissza. + </para> + <para> + Ha az elsõ paraméter tömb típusú, akkor a tömbbeli legnagyobb értéket adja vissza. + Ha az elsõ paraméter integer, float vagy string típusú, akkor legalább két paraméterrel + kell meghívni a függvényt, és az a legnagyobb értékû számmal tér vissza. + Korlátlan számú paraméterrel hívható meg ez a függvény. + </para> + <para> + Ha legalább egy összehasonlítandó érték float típusú, akkor mindegyik float-ként lesz kezelve és a + visszatérési érték is float lesz. Ha egyik sem float, akkor mindegyik integer-ként lesz kezelve, és + a visszatérési érték is integer lesz. + </para> + </refsect1> + </refentry> + + <refentry id="function.min"> + <refnamediv> + <refname>min</refname> + <refpurpose>megkeresi a legkisebb értéket</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>number <function>min</function></funcdef> + <paramdef>number <parameter>arg1</parameter></paramdef> + <paramdef>number <parameter>arg2</parameter></paramdef> + <paramdef><parameter><optional>...</optional></parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>number <function>min</function></funcdef> + <paramdef>array <parameter>numbers</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>min</function> a paraméterként átadott számként értelmezett értékek legkisebbjével tér vissza. + </para> + <para> + Ha az elsõ paraméter tömb típusú, akkor a tömbbeli legkisebb értéket adja vissza. + Ha az elsõ paraméter integer, float vagy string típusú, akkor legalább két paraméterrel + kell meghívni a függvényt, és az a legkisebb értékû számmal tér vissza. + Korlátlan számú paraméterrel hívható meg ez a függvény. + </para> + <para> + Ha legalább egy összehasonlítandó érték <type>float</type> típusú, akkor mindegyik float-ként lesz kezelve és a + visszatérési érték is float lesz. Ha egyik sem float, akkor mindegyik <type>integer</type>-ként lesz kezelve, és + a visszatérési érték is integer lesz. + </para> + </refsect1> + </refentry> + + <refentry id="function.mt-rand"> + <refnamediv> + <refname>mt_rand</refname> + <refpurpose>véletlenszámot generál - jobban :)</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>mt_rand</function></funcdef> + <void/> + </funcprototype> + <funcprototype> + <funcdef>int <function>mt_rand</function></funcdef> + <paramdef>int + <parameter>min</parameter> + </paramdef> + <paramdef>int + <parameter>max</parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A régebbi libc-k véletlenszám generátorai kétes vagy bizonytalan + jellegûek és lassúak voltak. Alapértelmezés szerint, a PHP a + libc véletlenszám generátorát használja a <function>rand</function> + függvényben. A <function>mt_rand</function> függvény egy "beugrós" + helyettesítése ennek. Ez egy ismert jellemvonásokkal bíró véletlenszám + generátor, a Mersenne Twister, ami többféle kriptogáfiai eljárás + inicializálásához (seeding) is megfelelõ véletlenszámokat generál + kb. négyszer gyorsabban, mint az átlagos libc rand függvények. + (Részletesebb információkért nézd meg a Mersenne Twister honlapját, amely + <ulink url="&url.mersenne;">&url.mersenne;</ulink> , az MT forrás + optimalizált változata <ulink url="&url.mersenne.twister;">&url.mersenne.twister;</ulink> pedig + címen található. + </simpara> + <simpara> + Ha a <parameter>min</parameter> és <parameter>max</parameter> paraméterek + nélkül hívod meg az <function>mt_rand</function> függvényt, akkor + az ál véletlenszám értéke 0 és <constant>RAND_MAX</constant> közé fog esni. + Ha pl. 5 és 15 közé (bezárólag) esõ véletlen számot akarsz kapni, akkor + <literal>mt_rand(5, 15)</literal> kell írni. + </simpara> + <simpara> + Ne felejtsd el a véletlenszám generátor kiinduló értékét beállítani + a <function>mt_srand</function> függvénnyel. + </simpara> + <note> + <para> + A 3.0.7 verziók elõtt a <parameter>max</parameter> paraméter helyett <parameter>range</parameter> (tartomány) + szerepelt. Ezekben a verziókban az elõzõ példával egyenértékû megoldás a <literal>mt_rand (5, 11)</literal>, hogy + 5 és 15 közé esõ véletlen számot kapj. + </para> + </note> + <simpara> + Lásd még: <function>mt_srand</function>, + <function>mt_getrandmax</function>, <function>srand</function>, + <function>rand</function> és <function>getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.mt-srand"> + <refnamediv> + <refname>mt_srand</refname> + <refpurpose> beállítja a "jobbik" véletlenszám generátor kiinduló értékét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>mt_srand</function></funcdef> + <paramdef>int <parameter>seed</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Beállítja a véletlenszám generátor kiinduló értékét <parameter>seed</parameter>-re. + <informalexample> + <programlisting role="php"> +// beállítás ezredmásodpercekkel +function make_seed() { + list($usec, $sec) = explode(' ', microtime()); + return (float) $sec + ((float) $usec * 100000); +} +mt_srand(make_seed()); +$randval = mt_rand(); + </programlisting> + </informalexample> + </para> + <simpara> + Lásd még: <function>mt_rand</function>, + <function>mt_getrandmax</function>, <function>srand</function>, + <function>rand</function> és + <function>getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.mt-getrandmax"> + <refnamediv> + <refname>mt_getrandmax</refname> + <refpurpose>visszaadja a lehetséges legnagyobb véletlenszámot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>mt_getrandmax</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaadja azt a legnagyobb véletlenszámot, amit a <function>mt_rand</function> meghívásakor visszadhat. + </simpara> + <simpara> + Lásd még: <function>mt_rand</function>, + <function>mt_srand</function> <function>rand</function>, + <function>srand</function> és + <function>getrandmax</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.number-format"> + <refnamediv> + <refname>number_format</refname> + <refpurpose>ezres csoportosítással formázza a számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>number_format</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + <paramdef>int <parameter><optional>decimals</optional></parameter></paramdef> + <paramdef>string <parameter><optional>dec_point</optional></parameter></paramdef> + <paramdef>string <parameter><optional>thousands_sep</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>number_format</function> a <parameter>number</parameter> paraméter formázott értékével tér vissza. + A függvény egy, két vagy négy paramétert fogad el(de hármat nem): + </para> + <para> + Ha csak egy paraméter van megadva, akkor <parameter>number</parameter> törtrész nélkül, + de ezresenkénti csoportosítással kerül formázásra. ("," választva el a csoportokat) + </para> + <para> + Két paraméter esetén a <parameter>number</parameter> a <parameter>decimals</parameter>-ba megadott számú + tizedesre lesz formázva, ponttal (".") a tizedesek elõtt és vesszõvel (",") választva el a csoportokat. + </para> + <para> + Négy paraméter esetén a <parameter>number</parameter> a <parameter>decimals</parameter>-ba megadott számú + tizedesre lesz formázva. A tizedesek elõtt a <parameter>dec_point</parameter> áll a pont (".") helyett, + és a <parameter>thousands_sep</parameter> választja el a csoprtokat a vesszõ (",") helyett. + </para> + <note> + <para> + A <parameter>thousands_sep</parameter>-nak csak az elsõ karakterét használja a függvény. + Például Ha <literal>ize</literal>-t adsz meg mint <parameter>thousands_sep</parameter> + az <literal>1000</literal> szám esetén, akkor <function>number_format</function> + <literal>1i000</literal>-t fog visszaadni. + </para> + </note> + <para> + <example> + <title><function>number_format</function> példa</title> + <para> + Példaként, a francia jelölés általában két tizedest tartalmaz, és + vesszõt használ (',') a tizedesek elválasztására, és szóközzel (' ') + tagolja az egész részt. Ez a következõképpen érhetõ el: + </para> + <programlisting role="php"> +<?php + + $szam = 1234.56; + + // angol jelölés (alapértelmezés) + $angol_szam_forma = number_format($szam); + // 1,234.56 + + // francia jelölés + $francia_szam_forma = number_format($szam, 2, ',', ' '); + // 1 234,56 + + + $number = 1234.5678; + + // angol jelölés ezresek csoportosítása nélkül + $angol_szam_forma = number_format($szam, 2, '.', ''); + // 1234.56 + +?> + </programlisting> + </example> + </para> + <note> + <para> + Lásd még: <function>sprintf</function>, + <function>printf</function> és <function>sscanf</function>! + </para> + </note> + </refsect1> + </refentry> + + <refentry id="function.octdec"> + <refnamediv> + <refname>octdec</refname> + <refpurpose>nyolcas számrendszerbõl tízesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>octdec</function></funcdef> + <paramdef>string <parameter>octal_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A nyolcas számrendszerbeli <parameter>number</parameter> tízes számrendszerbeli megfelelõjével tér vissza. + A legnagyobb átváltható szám "17777777777", ami 2147483647-et (tízes számrendszerben) ad eredményül. + decimal. + </para> + <para> + Lásd még: <function>decoct</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.pi"> + <refnamediv> + <refname>pi</refname> + <refpurpose>visszaadja pi(&pi;) értékét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>pi</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + PI megközelítõleg pontos értékét adja vissza. + </simpara> + <para> + <informalexample> + <programlisting> + +echo pi(); +// azt írja ki, hogy : 3.1415926535898 + + </programlisting> + </informalexample> + </para> + </refsect1> + </refentry> + + <refentry id="function.pow"> + <refnamediv> + <refname>pow</refname> + <refpurpose>hatványozás</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>number <function>pow</function></funcdef> + <paramdef>number <parameter>base</parameter></paramdef> + <paramdef>number <parameter>exp</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>base</parameter>-t a <parameter>exp</parameter> hatványra emelt értékével tér vissza. + Ha lehetséges, akkor a függvény visszatérési értéke <type>integer</type> lesz. + </para> + <para> + Ha a hatványérték nem számítható ki, akkor egy "nem fatális" (warning) hibát jelez + a <function>pow</function> függvény, és &false;-szal tér vissza. + </para> + <example> + <title>Néhány példa a <function>pow</function> alkalmazására</title> + <programlisting role="php"> +<![CDATA[ +<?php + +var_dump( pow(2,8) ); // int(256) +echo pow(-1,20); // 1 +echo pow(0, 0); // 1 + +echo pow(-1, 5.5); // hiba + +?> +]]> + </programlisting> + </example> + <warning> + <para> + PHP 4.0.6-ban és korábbi verziókban a <function>pow</function> mindig <type>float</type> típussal tért vissza, + és soha nem jelzett hibát. + </para> + </warning> + <para> + Lásd még: <function>exp</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.rad2deg"> + <refnamediv> + <refname>rad2deg</refname> + <refpurpose>radiánból fokokra vált</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>rad2deg</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény a radiánban értlemezett <parameter>number</parameter> paramétert fokokba váltja. + </para> + <para> + Lásd még: <function>deg2rad</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.rand"> + <refnamediv> + <refname>rand</refname> + <refpurpose>véletlenszámot generál</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>rand</function></funcdef> + <void/> + </funcprototype> + <funcprototype> + <funcdef>int <function>rand</function></funcdef> + <paramdef>int + <parameter>min</parameter> + </paramdef> + <paramdef>int + <parameter>max</parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha a <parameter>min</parameter> és <parameter>max</parameter> paraméterek + nélkül hívod meg az <function>mt_rand</function> függvényt, akkor + az ál véletlenszám értéke 0 és <constant>RAND_MAX</constant> közé fog esni. + Ha pl. 5 és 15 közé (bezárólag) esõ véletlen számot akarsz kapni, akkor + <literal>mt_rand(5, 15)</literal> kell írni. + </simpara> + <simpara> + Ne felejtsd el a véletlenszám generátor kiinduló értékét beállítani + a <function>srand</function> függvénnyel. + </simpara> + <note> + <para> + A 3.0.7 verziók elõtt a <parameter>max</parameter> paraméter helyett <parameter>range</parameter> (tartomány) + szerepelt. Ezekben a verziókban az elõzõ példával egyenértékû megoldás a <literal>mt_rand (5, 11)</literal>, hogy + 5 és 15 közé esõ véletlen számot kapj. + </para> + </note> + <simpara> + Lásd még: <function>srand</function>, + <function>getrandmax</function>, <function>mt_rand</function>, + <function>mt_srand</function> és + <function>mt_getrandmax</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.round"> + <refnamediv> + <refname>round</refname> + <refpurpose>lebegõpontos számot kerekít</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>round</function></funcdef> + <paramdef>float <parameter>val</parameter></paramdef> + <paramdef>int + <parameter><optional>precision</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>val</parameter> paraméter <parameter>precision</parameter>-ban megadott pontosságra + kerekített értékével tér vissza. A <parameter>precision</parameter> a tizedespont után álló + számjegyek számát jelenti. + A <parameter>precision</parameter> nulla vagy negatív szám is lehet. + </para> + <para> + <caution> + <simpara> + PHP nem kezeli megfelelõen a <literal>"12,300.2"</literal>-hez hasonló sztringeket alapértelmezés szerint. + Lásd <link linkend="language.types.string.conversion">string konverziók</link>. + </simpara> + </caution> + </para> + <para> + <informalexample> + <programlisting role="php"> +$ize = round(3.4); // $ize == 3.0 +$ize = round(3.5); // $ize == 4.0 +$ize = round(3.6); // $ize == 4.0 +$ize = round(3.6, 0); // a fentivel azonos + +$ize = round(1.95583, 2); // $ize == 1.96 + +$ize = round(1241757, -3); // $ize == 1242000 + </programlisting> + </informalexample> + </para> + <note> + <simpara> + A <parameter>precision</parameter> paraméter csak PHP 4-tõl használható. + </simpara> + </note> + <simpara> + Lásd még: <function>ceil</function> és <function>floor</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.sin"> + <refnamediv> + <refname>sin</refname> + <refpurpose>szinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>sin</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiánban megadott <parameter>arg</parameter> szinuszát adja vissza. + </para> + <para> + Lásd még: <function>cos</function> és <function>tan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.sqrt"> + <refnamediv> + <refname>sqrt</refname> + <refpurpose>négyzetgyököt von</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>sqrt</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> négyzetgzökét adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.srand"> + <refnamediv> + <refname>srand</refname> + <refpurpose>a véletlenszámgenerátor kiinduló értékét állítja be</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>srand</function></funcdef> + <paramdef>int <parameter>seed</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Beállítja a véletlenszám generátor kiinduló értékét <parameter>seed</parameter>-re. + <informalexample> + <programlisting role="php"> +// beállítás ezredmásodpercekkel +function make_seed() { + list($usec, $sec) = explode(' ', microtime()); + return (float) $sec + ((float) $usec * 100000); +} +srand(make_seed()); +$randval = rand(); + </programlisting> + </informalexample> + </para> + <simpara> + Lásd még: <function>rand</function>, + <function>getrandmax</function>, <function>mt_rand</function>, + <function>mt_srand</function> és + <function>mt_getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.tan"> + <refnamediv> + <refname>tan</refname> + <refpurpose>tangens</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>tan</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiánban megadott <parameter>arg</parameter> tangensét adja vissza. + </para> + <para> + Lásd még: <function>sin</function> és <function>cos</function>! + </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 +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 +--> Index: phpdoc/hu/functions/pcre.xml diff -u /dev/null phpdoc/hu/functions/pcre.xml:1.3 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/pcre.xml Fri Dec 7 10:52:50 2001 @@ -0,0 +1,2571 @@ +<?xml version="1.0" encoding="iso-8859-2"?> +<!-- EN-Revision: 1.61 Maintainer: pgerzson Status: ready --> +<reference id="ref.pcre"> + <title>Reguláris kifejezések függvényei (Perl kompatibilis)</title> + <titleabbrev>PCRE</titleabbrev> + + <partintro> + <para> + Ezekben a függvényekben használatos minták szintaktikája nagyon + hasonlít a PERL-ben megismerthez. A kifejezéseket határolójelek + közé kell rakni, például perjelek / közé. Az alfanumerikus karakterektõl + és a visszaperjeltõl (\) eltekintve bármi használható határolójelként. Ha a + határolójel magában a kifejezésben is szerepel, akkor egy visszaperjelet + (\) kell eléírni. A PHP 4.0.4-s verziójától kezdve lehetõség van a (), {}, [], és <> párban álló határolók használatára, ahogy Perl-ben is. + </para> + <para> + A lezáró határolójelet különféle módosítók követhetik, amelyek a + mintailleszkedést befolyásolják. Bõvebben: <link linkend="pcre.pattern.modifiers">Minta módosítók</link> fejezet. + </para> + <para> + <example> + <title>Példák érvényes mintákra</title> + <itemizedlist> + <listitem><simpara>/<\/\w+>/</simpara></listitem> + <listitem><simpara>|(\d{3})-\d+|Sm</simpara></listitem> + <listitem><simpara>/^(?i)php[34]/</simpara></listitem> + <listitem><simpara>{^\s+(\s+)?$}</simpara></listitem> + </itemizedlist> + </example> + </para> + <para> + <example> + <title>Példák helytelen mintákra</title> + <itemizedlist> + <listitem> + <simpara> + /href='(.*)' - hiányzó lezáró határolókarakter + </simpara> + </listitem> + <listitem> + <simpara> + /\w+\s*\w+/J - ismeretlen módosító 'J' + </simpara> + </listitem> + <listitem> + <simpara> + 1-\d3-\d3-\d4| - hiányzó kezdõ határolókarakter + </simpara> + </listitem> + </itemizedlist> + </example> + </para> + <note> + <simpara> + A Perl kompatibilis reguláris függvények PHP4-tõl és PHP 3.0.9-tõl + hozzáférhetõk. + </simpara> + <simpara> + A reguláris kifejezések támogatását a PCRE könyvtár biztosítja. + Ez nyílt forráskódú szoftver, amit Philip Hazel írt, és a szerzõi + jogok az angliai Cambridge Egyetem tulajdona. A csomag hozzáférhetõ + a <ulink url="&url.pcre;">&url.pcre;</ulink> címen. + </simpara> + </note> + </partintro> + + <refentry id="function.preg-match"> + <refnamediv> + <refname>preg_match</refname> + <refpurpose>Reguláris kifejezést illeszt a megadott szövegre</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>preg_match</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>array + <parameter><optional>matches</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter> szövegben egyezést keres a + <parameter>pattern</parameter> mintában megadott reguláris kifejezéssel. + </para> + <para> + Ha a <parameter>matches</parameter> paraméterrel hívod meg, akkor a + keresés végeredményét ebbe tárolja el a függvény. A $matches[0] + tartalmazza azt a szövegrészt, ami a teljes mintára illeszkedett, és a + további elemek ($matches[1] és így tovább) azokat, amelyek a tömbindex + szerinti "gyûjtõ" részmintákra illeszkedtek. + </para> + <para> + Ez a függvény &true;-val tér vissza, ha a <parameter>pattern</parameter> + mintát sikerült illesztenie a <parameter>subject</parameter> szövegre, + egyébként - sikertelen illesztés vagy hiba esetén - &false;-szal. + </para> + <para> + <example> + <title>A "php" sztring keresése</title> + <programlisting role="php"> +// az "i" a minta határolójele után azt jelzi, +// hogy a kis- és nagybetûkre közömbös a keresés. +if (preg_match ("/php/i", "PHP a web-scripting nyelvek egyike.")) { + print "A minta passzol."; +} else { + print "A minta nem passzol."; +} + </programlisting> + </example> + <example> + <title>A "web" szó keresése</title> + <programlisting role="php"> +// a mintában a \b szóhatárt jelöl, ezért csak a különálló +// "web" szavakra fog illeszkedni, és szórészletekre +// úgymint "webbing" vagy "cobweb" pedig nem. +if (preg_match ("/\bweb\b/i", "PHP a web scripting nyelvek egyike.")) +{ + print "A minta passzol."; +} else { + print "A match nem passzol."; +} +if (preg_match ("/\bweb\b/i", "PHP a website scripting nyelvek egyike.")) { + print "A minta passzol."; +} else { + print "A match nem passzol."; +} + </programlisting> + </example> + <example> + <title> domain-név kinyerése URL-bõl</title> + <programlisting role="php"> +// gazdagép neve az URL-bõl +preg_match("/^(http:\/\/)?([^\/]+)/i", +"http://www.php.net/index.html", $matches); +$host = $matches[2]; +// a gazdagépnév utolsó két része +preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches); +echo "A domain név : ".$matches[0]."\n"; + </programlisting> + </example> + Ez a példa a következõt eredményezi: + <programlisting> +A domain név : php.net + </programlisting> + Lásd még: <function>preg_match_all</function>, + <function>preg_replace</function> és + <function>preg_split</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-match-all"> + <refnamediv> + <refname>preg_match_all</refname> + <refpurpose>Reguláris kifejezés teljeskörû illesztését végzi</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>preg_match_all</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>array <parameter>matches</parameter></paramdef> + <paramdef>int + <parameter><optional>order</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter> szövegben megkeresi az összes, a + <parameter>pattern</parameter> mintára illeszkedõ + részt, és a <parameter>matches</parameter> tömbbe menti azokat a + <parameter>order</parameter> paraméterben meghatározott sorrendben. + </para> + <para> + Amint az elsõ illeszkedés megtalálta, a soronkövetkezõ illesztés az + utolsó illeszkedéstõl kezdõdik. + </para> + <para> + Az <parameter>order</parameter> paraméter két értéket vehet fel: + <variablelist> + <varlistentry> + <term>PREG_PATTERN_ORDER</term> + <listitem> + <para> + Azt eredményezi, hogy a $matches[0] egy tömb lesz, ahol az összes a + teljes mintára illeszkedõ szövegrész lesz egymás után, $matches[1] + tömbben pedig azok a szövegrészek, amelyek elsõ "begyûjtõ" + részmintára illeszkednek, és így tovább. + <informalexample> + <programlisting role="php"> +preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", + "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", + $out, PREG_PATTERN_ORDER); +print $out[0][0].", ".$out[0][1]."\n"; +print $out[1][0].", ".$out[1][1]."\n" + </programlisting> + </informalexample> + Ez a példa az alábbi eredményt adja: + <informalexample> + <programlisting> +<b>példa: </b>, <div align=left>ez itt a teszt szöveg</div> +példa: , ez itt a teszt szöveg + </programlisting> + </informalexample> + Tehát, az $out[0] egy tömb az összes, teljes mintára illeszkedõ + szöveggel, és $out[1] egy tömb az összes HTML-elem közti szöveggel. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>PREG_SET_ORDER</term> + <listitem> + <para> + Azt eredményezi, hogy $matches[0]-ben az elsõ illesztés eredményeit, + a $matches[1] a második eredményeit fogja tartalmazni, és így tovább. + <informalexample> + <programlisting role="php"> +preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", + "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", + $out, PREG_SET_ORDER); +print $out[0][0].", ".$out[0][1]."\n"; +print $out[1][0].", ".$out[1][1]."\n" + </programlisting> + </informalexample> + Ez a példa az alábbi eredményt adja: + <informalexample> + <programlisting role="php"> +<b>példa: </b>, példa: +<div align=left>ez itt a teszt szöveg</div>, ez itt a teszt szöveg + </programlisting> + </informalexample> + Ebben az esetben $matches[0] az elsõ illesztés során megtalált + szövegrészeket tartalmazza, a $matches[0][0]-ben a teljes mintára + illeszkedõ szöveggel, $matches[0][1]-ben az elsõ "gyûjtõ" részmintára + illeszkedõ résszel, és így tovább. Ehhez hasonlóan $matches[1] a + második illesztés során megtalált szövegeket tartalmazza, stb. + </para> + </listitem> + </varlistentry> + </variablelist></para> + <para> + Ha nincs megadva az <parameter>order</parameter> paraméter, akkor az + alapértelmezés a PREG_PATTERN_ORDER. + </para> + <para> + Ez a függvény az összes illeszkedés számával tér vissza, vagy + &false;-szal sikertelen illesztés vagy hiba esetén. + </para> + <para> + <example> + <title>Az összes telefonszám kigyûjtése egy adott szövegbõl.</title> + <programlisting role="php"> +preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", + "Hívd a 555-1212 vagy 1-800-555-1212 számot", $phones); + </programlisting> + </example> + </para> + <para> + <example> + <title>HTML elemek keresése (mohón)</title> + <programlisting role="php"> +// A \\2 példa a hivatkozásra. Ez mondja meg PCRE-nek, hogy a másodikként +// megadott kerek zárójelre - ami ebben az esetben ([\w]+) - illesztett +// szövegnek kell szerepelnie azon a helyen is. A plusz visszaperjelre azért +// van szükség, mert a minta macskakörmök ("") közé van fogva. +$html = "<b>félkövér szöveg</b><a href=howdy.html>kattints ide</a> + +preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, +$matches); + +for ($i=0; $i< count($matches[0]); $i++) { +echo "passzolt: ".$matches[0][$i]."\n"; +echo "1. rész: ".$matches[1][$i]."\n"; +echo "2. rész: ".$matches[3][$i]."\n"; +echo "3. rész: ".$matches[4][$i]."\n\n"; +} + </programlisting> + </example> + A példa ezt eredményezi: + <programlisting> +passzolt: <b>félkövér szöveg</b> +1. rész: <b> +2. rész: félkövér szöveg +3. rész: </b> + +passzolt: <a href=howdy.html>kattints ide</a> +1. rész: <a href=howdy.html> +2. rész: kattints ide +3. rész: </a> + </programlisting> + </para> + <simpara> + Lásd még: <function>preg_match</function>, + <function>preg_replace</function>, + és <function>preg_split</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.preg-replace"> + <refnamediv> + <refname>preg_replace</refname> + <refpurpose>Reguláris kifejezés alapján keres és cserél</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>preg_replace</function></funcdef> + <paramdef>mixed <parameter>pattern</parameter></paramdef> + <paramdef>mixed <parameter>replacement</parameter></paramdef> + <paramdef>mixed <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter>-ben megadott szövegben keres a + <parameter>pattern</parameter> paraméterben megadott mintára illeszkedõ + részeket és azokat lecseréli a + <parameter>replacement</parameter>-ben megadott kifejezésre. Ha a <parameter>limit</parameter> is szerepel, akkor csak + <parameter>limit</parameter> számú illeszkedõ rész lesz cserélve, + ha <parameter>limit</parameter> hiányzik vagy értéke -1, akkor minden + illeszkedõ részt cserél. + </para> + <para> + A <parameter>replacement</parameter>-ben hivatkozásokat is el lehet + helyezni <literal>\\<replaceable>n</replaceable></literal> vagy + (PHP 4.0.4-tõl kezdve) <literal><replaceable>$n</replaceable></literal> + alakban(ez utóbbit részesítsd elõnyben). Minden ilyen hivatkozás + az <replaceable>n</replaceable>. zárójelezett részminta által megtalált + szöveggel lesz helyettesítve. Az <replaceable>n</replaceable> értéke + 0-tól 99-ig terjedhet, ahol is a <literal>\\0</literal> vagy + <literal>$0</literal> hivatkozás az egész mintára illeszkedõ szöveget + jelenti. A kerek nyitó zárójelek 1-tõl kezdve balról jobbra vannak + számozva és az általuk bevezetett "gyûjtõ" részminták sorszámát adják. + </para> + <para> + Ha volt egyezés, akkor az új <parameter>subject</parameter>-tel tér + vissza a függvény, egyébként a változatlanul hagyott + <parameter>subject</parameter>-tel. + </para> + <para> + A <function>preg_replace</function>-nek átadott minden paraméter lehet + tömb is. + </para> + <para> + Ha <parameter>subject</parameter> tömb típusú, akkor a keresés és a + helyettesítés a tömb minden elemén végrehajtódik, és a visszatérési érték + is tömb lesz. + </para> + <para> + Ha a <parameter>pattern</parameter> és + <parameter>replacement</parameter> paraméterek tömb típusúak, akkor a + <function>preg_replace</function>veszi a tömbök elemeit és mindegyikkel + páronként elvégzi a keresést és a helyettesítést a + <parameter>subject</parameter> szövegen. Ha a + <parameter>replacement</parameter> tömbnek a + <parameter>pattern</parameter> tömbnél a kevesebb eleme van, akkor + a pár nélküli mintákat üres sztringgel fogja helyettesíteni. Ha a + <parameter>pattern </parameter> tömb és + <parameter>replacement</parameter> sztring típusú, akkor ezt a + helyettesítési szöveget használja minden + <parameter>pattern</parameter>-beli mintához. + A fordított esetnek nem lenne sok értelme. + </para> + <para> + Az <literal>/e</literal> módosító hatására a + <function>preg_replace</function> a + <parameter>replacement</parameter> paramétert PHP kódként értelmezi, + miután a hivatkozások behelyettesítését elvégezte. Tipp: bizonyosodj meg + arról, hogy <parameter>replacement</parameter> érvényes PHP kódnak felel + meg (sztringben megadva), másképp a PHP szintaktikai hibát (Parse Error) + fog jelezni abban a sorban, ahol a <function>preg_replace</function> + függvényt meghívtad. + </para> + <para> + <example> + <title>Néhány érték cseréje</title> + <programlisting> +$mintak = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/", + "/^\s*{(\w+)}\s*=/"); +$csere = array ("\\3/\\4/\\1\\2", "$\\1 ="); +print preg_replace ($mintak, $csere, "{kezdoDatum} = 1999-5-27"); + </programlisting> + </example> + Ennek a példának a végeredménye: + <programlisting> +$kezdoDatum = 5/27/1999 + </programlisting> + <example> + <title>Az /e módosítót használata:</title> + <programlisting role="php"> +preg_replace ("/(<\/?)(\w+)([^>]*>)/e", + "'\\1'.strtoupper('\\2').'\\3'", + $html_body); + </programlisting> + <para> +Ez az összes HTML elemet nagybetûsre cseréli a bemeneti szövegben. + </para> + </example> + <example> + <title>HTML-bõl sima szöveggé konvertálás</title> + <programlisting role="php"> +// A $dokumentum HTML formátumú. +// Minden HTML elemet, javascript szakaszt és térközt eltávolít a +// dokumentumból. Ezenkívül néhány megszokott HTML entitást is a +// sima, karakteres megfelelõikre konvertál. + +$mit = array ("'<script[^>]*?>.*?</script>'si", // javascript eltüntetése + "'<[\/\!]*?[^<>]*?>'si", // HTML elemek eltüntetése + "'([\r\n])[\s]+'", // térközök + "'&(quot|#34);'i", // HTML entitások + "'&(amp|#38);'i", + "'&(lt|#60);'i", + "'&(gt|#62);'i", + "'&(nbsp|#160);'i", + "'&(iexcl|#161);'i", + "'&(cent|#162);'i", + "'&(pound|#163);'i", + "'&(copy|#169);'i", + "'&#(\d+);'e"); // PHP kódként értelmezze + +$mire = array ("", + "", + "\\1", + "\"", + "&", + "<", + ">", + " ", + chr(161), + chr(162), + chr(163), + chr(169), + "chr(\\1)"); + +$szoveg = preg_replace ($mit, $mire, $dokumentum); + </programlisting> + </example> + </para> + <note> + <para> + A <parameter>limit</parameter> paraméter a PHP 4.0.1pl2 után került a + nyelvbe. + </para> + </note> + <para> + Lásd még: <function>preg_match</function>, + <function>preg_match_all</function> és + <function>preg_split</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-replace-callback"> + <refnamediv> + <refname>preg_replace_callback</refname> + <refpurpose>Reguláris kifejezés alapján keres és a megadott függvényt meghívva végzi a cserét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>preg_replace_callback</function></funcdef> + <paramdef>mixed <parameter>pattern</parameter></paramdef> + <paramdef>mixed <parameter>callback</parameter></paramdef> + <paramdef>mixed <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ennek a függvénynek a mûködése szinte azonos a + <function>preg_replace</function> függvényével azt leszámítva, hogy + <parameter>replacement</parameter> paraméterként egy + <parameter>callback</parameter> függvényt kell megadni, amely minden + sikeres illesztésnél meghívásra kerül, amelynek az illeszkedõ szövegeket egy + tömbben adja át a PHP. A 'meghívott' függvénynek a helyettesítési + szöveggel kell visszatérnie. Ez a függvény a PHP 4.0.5-tõl elérhetõ. + </para> + <para> + Lásd még: <function>preg_replace</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-split"> + <refnamediv> + <refname>preg_split</refname> + <refpurpose>Sztringet darabol fel reguláris kifejezésre illeszkedõ részei mentén</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>preg_split</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + <paramdef>int + <parameter><optional>flags</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + + <note> + <para> + A <parameter>flags</parameter> paraméterrel a PHP 4 Beta 3-ban lett + kiegészítve. + </para> + </note> + + <para> + Ez a függvény a <parameter>pattern</parameter> minta illesztésének + határai mentén darabolja fel <parameter>subject</parameter> szöveget, + és a szövegdarabokat tömbbe összefogva adja vissza. + </para> + + <para> + Ha a <parameter>limit</parameter> meg van adva, akkor csak + <parameter>limit</parameter> számú darabbal tér vissza. Ha a + <parameter>limit</parameter> értéke -1, az azt jelenti, nincs ilyen + korlát, és ez akkor hasznos, ha a <parameter>flags</parameter> + paraméter értékét is szeretnéd megadni. + </para> + + <para> + A <parameter>flags</parameter> a következõ jelzõknek bármilyen + kombinációja lehet a ( bitszintû | operátorral): + <variablelist> + <varlistentry> + <term>PREG_SPLIT_NO_EMPTY</term> + <listitem> + <simpara> + Ekkor csak a nem üres szövegrészeket adja vissza a + <function>preg_split</function>. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>PREG_SPLIT_DELIM_CAPTURE</term> + <listitem> + <simpara> + Ekkor a kerekzárójelek közé fogott ("gyûjtõ") részmintára + illeszkedõ szövegrészeket is visszadja a függvény. + Ez a jelzõ 4.0.5 verziótól használható. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + <example> + <title><function>preg_split</function> példa : a keresett szöveg + kucslszavait adja vissza.</title> + <programlisting role="php"> +// Feldarabolja a kifejezést vesszõk és térközkarakterek mentén, +// amelyek a következõk " ", \r, \t, \n és \f . +$kulcsszavak = preg_split ("/[\s,]+/", "hypertext language, programming"); + </programlisting> + </example> + </para> + <para> + <example> + <title>Sztring karakterekre darabolása</title> + <programlisting role="php"> +$sztring = 'karakterfûzér'; +$karakterek = preg_split('//', $sztring, -1, PREG_SPLIT_NO_EMPTY); +print_r($karakterek); + </programlisting> + </example> + </para> + <para> + Lásd még: + <function>spliti</function>, + <function>split</function>, + <function>implode</function>, + <function>preg_match</function>, + <function>preg_match_all</function> és + <function>preg_replace</function>! + </para> + + </refsect1> + </refentry> + + <refentry id="function.preg-quote"> + <refnamediv> + <refname>preg_quote</refname> + <refpurpose>Reguláris kifejezés metakaraktereit literálissá + változtatja</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>preg_quote</function></funcdef> + <paramdef>string <parameter>str</parameter></paramdef> + <paramdef>string + <parameter><optional>delimiter</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>preg_quote</function> függvény az <parameter>str</parameter> + paraméterben kapott szövegben minden olyan karakter elé egy + visszaperjelet helyez el, amely egy reguláris kifejezésben speciális + jelentéssel bírhat. Ez akkor hasznos, ha olyan futási idõ alatt + összeállított sztringet akarsz egy mintában felhasználni, amelyben + elõfordulhatnak speciális jelentéssel bíró reguláris karakterek. + </para> + <para> + Ha a nem kötelezõ <parameter>delimiter</parameter>-t is megadod, akkor ez + a karakter is visszaperjellel lesz bevezetve. Ez pedig azért hasznos, + mert PCRE által megkövetelt határolójeleket is le tudod kezelni így. + A / a leggyakrabban használt határolójel.</para> + <para> + A reguláris kifejezésekben elõforduló speciális karakterek: + <screen>. \ + * ? [ ^ ] $ ( ) { } = ! < > | :</screen> + </para> + <para> + <example> + <title></title> + <programlisting role="php"> +$kulcsszavak = "$40 egy g3/400-ért"; +$kulcsszavak = preg_quote ($keywords, "/"); +echo $kulcsszavak; // \$40 egy g3\/400-ért adja vissza + </programlisting> + </example> + <example> + <title>Adott szöveg megdöntése</title> + <programlisting role="php"> + +// Ebben a példában preg_quote($szo)-t használjuk arra, hogy +// a csillagokat megfosszuk a reguláris kifejezésekben használt +// speciális jelentésüktõl. + +$szoveg = "Ezt a könyvet *nagyon* nehéz megtalálni."; +$szo = "*nagyon*"; +$szoveg = preg_replace ("/".preg_quote($szo)."/", + "<i>".$szo."</i>", + $szoveg); + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-grep"> + <refnamediv> + <refname>preg_grep</refname> + <refpurpose> + Visszaadja azokat a tömbelemeket, amelyek illeszkednek a mintára + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>preg_grep</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>array <parameter>input</parameter></paramdef> + </funcprototype> + </funcsynopsis> + + <para> + A <function>preg_grep</function> függvény egy olyan tömbbel tér vissza, + amelyben az <parameter>input</parameter> tömb azon elemei szerepelnek, + amelyek a <parameter>pattern</parameter> mintára illeszkedtek.</para> + <para> + PHP 4.0.4-tõl kezdve a <function>preg_grep</function> függvény + eredményeként visszaadot tömb az <parameter>input</parameter> indexeit használja. Ha nem ezt + akarod, akkor használd a <function>array_values</function> függvényt + a <function>preg_grep</function> által visszaadott tömb + újraindexeléséhez.</para> + <para> + <example> + <title><function>preg_grep</function> példa</title> + <programlisting role="php"> +// visszad minden olyan $tomb-beli elemet, ami lebegõpontos számot tartalmaz +$lebegopontos_tomb = preg_grep ("/^(\d+)?\.\d+$/", $tomb); + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="pcre.pattern.modifiers"> + <refnamediv> + <refname>Minta módosítók</refname> + <refpurpose>A lehetséges, PCRE reguláris kifejezéseket kiértékelését + befolyásoló módosítók felsorolása</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <para> + Itt látható a pillanatnyilag használható PCRE módosítók listája. + A zárójelekben közölt nevek a módosítók PCRE-ben használt belsõ nevei. + </para> + <para> + <blockquote> + <variablelist> + <varlistentry> + <term><emphasis>i</emphasis> (PCRE_CASELESS)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a minta a nagy- és kisbetûk + különbözõségére érzéketlen, a mintában elõforduló betûk mind a kis- + mind a nagybetûkre illeszkednek. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>m</emphasis> (PCRE_MULTILINE)</term> + <listitem> + <simpara> + Alapértelmezés szerint PCRE úgy tekinti a tárgyszöveget, mintha az + egyetlen sorból állna (mégha történetesen tartalmaz is néhány újsor + karaktert). A "sor eleje" metakarakter (^) csakis a tárgyszöveg + elejére, míg a "sor vége" metakarakter ($) csakis a szöveg végére + vagy a lezáró újsor-karakterre engedi illeszteni a mintát - kivéve + ha <emphasis>D</emphasis> módosító be van kapcsolva. Ez ugyanúgy + mûködik, mint Perl-ben. + </simpara> + <simpara> + Amikor ez a módosító be van kapcsolva, akkor "sor eleje" illetve + "sor vége" szerkezetek közvetlenül a következõ illetve közvetlenül a + megelõzõ újsor karakterekre, és a szöveg legelejére illetve + legvégére illeszkednek. Ez egyenértékû Perl /m módosítójával. + Ha nincs a tárgyszövegben "\n" karakter vagy a mintában nincs ^ + illetve $, akkor ennek a módosítónak nincs hatása. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>s</emphasis> (PCRE_DOTALL)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, a mintában elõforduló . + metakarakter minden karakterre - beleértve az újsor karaktert is - + illeszkedik, míg enélkül az újsor karakterre nem illeszkedne. + Ez egyenértékû a Perl /s módosítójával. A tagadó karakterosztályok + (mint például [^a]) mindig illeszkednek az újsor karakterre + függetlenül ennek a módósítónak a beállításától. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>x</emphasis> (PCRE_EXTENDED)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a mintában szereplõ + térközök - kivéve visszaperjelet elétéve vagy a + karakterosztályokon belülieket - nem lesznek részei a mintának, + valamint minden karakter, amely karakterosztályon kívüli literális # + és a rákövetkezõ újsorkarakter közé esik, figyelmen kívül hagy a + PCRE. Ez egyenértékû a Perl /x módosítójával, ami lehetõvé teszi + megjegyzések elhelyezését a bonyolultabb mintákban. Megjegyzendõ, + hogy ez csak bizonyos poziciókra vonatkozik, térközkarakterek soha + nem szerepelhetnek speciális karaktersorozatokban, mint például (?( + -ban, ami egy feltételes részminta kezdetét jelöli. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>e</emphasis></term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor <function>preg_replace + </function> függvény a helyettesítési paraméterként kapott + sztringet - a hivatkozások feloldása után - PHP kódként értelmezi, + és ennek a kódnak az eredményét helyettesíti be a keresett szöveg + helyére. + </simpara> + <simpara> + Csak a <function>preg_replace</function> használja ezt a módosítót, + a többi PCRE függvény figyelmen kívül hagyja. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>A</emphasis> (PCRE_ANCHORED)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a keresett mintát + "lerögzíti", ami annyit jelent, hogy a minta illesztése + korlátozva van a tárgyszöveg elejére. Ezt a hatást elérhetjük + ha magát a mintát megfelelõen alakítjuk ki, miként Perl-ben ennek ez + az egyetlen módja. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>D</emphasis> (PCRE_DOLLAR_ENDONLY)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor dollár metakarakter ($) + a mintán belül csak a tárgyszöveg végére illeszkedik. Enélkül + a módosító nélkül a $ a legutolsó újsorkarakter elõtti pozicióra is + illeszkedik, de semmilyen más poziciójú újsorkarakter elõtt nem. + Ezt a módosítót figyelmen kívül hagyja a PCRE, ha a + <emphasis>m</emphasis> be van kapcsolva. Nincs megfelelõje Perl-ben. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>S</emphasis></term> + <listitem> + <simpara> + Ha egy mintát többször használunk, akkor érdemes több idõt hagyni + a kiértékelésére, hogy az illesztésre fordított idõ + lerövidülhessen. Ennek a módosítónak a bekapcsolásával ezt többletet + biztosítjuk. Jelenleg, csak olyan nem "rögzített" minták esetén + hasznos, amelyek nem egy egyszerû, rögzített karakterrel kezdõdnek. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>U</emphasis> (PCRE_UNGREEDY)</term> + <listitem> + <simpara> + Ez a módosító megfordítja a kvantorok (sokszorozók) mohóságát, + azaz alapértelmezés szerint nem lesznek mohók, csak ha egy ? követi + azokat. Ez nem Perl-kompatibilis. A mintában is beállítható + (?U) sorozat megadásával. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>X</emphasis> (PCRE_EXTRA)</term> + <listitem> + <simpara> + Ez a módosító PCRE további lehetõségeit teszi elérhetõvé, amelyek + nem Perl-kompatibilisak. Valamennyi visszaperjel a mintában, amit + olyan karakter követ, aminek nincs speciális jelentése, hibát okoz, + és ilyenformán lefoglalja ezeket a karakterkombinációkat a jövõbeni + kiterjesztések elõtt. Alapértelmezés szerint az ilyen különleges + jelentés nélküli karakter elõtt álló visszaperjelet a Perl betû + szerint veszi. Jelenleg nincs más jellegzetesség, amit ez a módosító + befolyásolna. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>u</emphasis> (PCRE_UTF8)</term> + <listitem> + <simpara> + Ez a módosító is PCRE olyan további lehetõségét teszi elérhetõvé, + ami nem Perl-kompatibilis. A mintát UTF-8 kódolású szövegnek + tekinti. Ez a módosító PHP 4.1.0-tõl kezdve érhetõ el. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </blockquote> + </para> + </refsect1> + </refentry> + + <refentry id="pcre.pattern.syntax"> + + <refnamediv> + <refname>Regurális kifejezések szintaxisa</refname> + <refpurpose>PCRE regurális kifejezések nyelvtanának leírása</refpurpose> + </refnamediv> + + <refsect1> + <title>Leírás</title> + <simpara> + A PCRE könyvtár függvények sorát tartalmazza, amelyek reguláris + kifejezések mintaillesztését végzik el ugyanazt a szintaxist és + szemantikát használva - néhány eltérést nem számítva -, mint a Perl 5. + (lásd alább). A jelenlegi megvalósítás Perl 5.005-höz hasonló. + </simpara> + </refsect1> + + <refsect1> + <title>Perl-tõl való eltérések</title> + <para> + Különbségek Perl 5.005-höz képest: + <orderedlist> + <listitem> + <simpara> + 1. Alapértelmezés szerint térköznek tekintendõ minden olyan karakter, + amit a C könyvtár isspace() függvénye felismer, bár lehetõség van arra, + hogy PCRE-t eltérõ karakterkódtáblázattal fordítsuk le. Az isspace() + rendszerint a szóköz, lapdobás, "kocsi-vissza", újsor és vízszintes + illetve függõleges tabulátorokat tekinti térköznek. Perl 5-ben ez utóbbi + már nem szerepel a listában. A \v szekvencia nagyon sokáig benne volt a + Perl dokumentációjában, valójában soha nem ismerte fel mintaillesztés + közben. Legalább az 5.002 verzióig ezt a karaktert is térköznek + tekintették, de a 5.004 és 5.005 verziókban már nem illeszkedik a \s-re. + </simpara> + </listitem> + <listitem> + <simpara> + 2. PCRE nem engedi meg az elõretekintõ tesztekben (lookahead assertion) + a kvantorok (sokszorozók) használatát. Perl-ben ez megengedett, de nem a + várt eredményt adja. Például (?!a){3}, nem azt jelenti, hogy teszteli, vajon + a következõ három karakter nem "a", hanem azt, hogy háromszor "jelenti", + ha a következõ karakter nem "a". + </simpara> + </listitem> + <listitem> + <simpara> + 3. Tagadó elõretekintõ tesztekben (negated lookahead assertion) szereplõ + "begyûjtõ" részminták (capturing subpatterns) számon vannak tartva, de a + hozzájuk tartozó numerikus változók soha nem kerülnek feltöltésre. + Perl feltölti ezeket a numerikus változókat valamilyen, a sikertelen + teszt elõtti mintára illeszkedõ részt követõ karakterekkel, de csak + akkor, ha a tagadó elõretekintõ tesztnek csak egy ága volt. + </simpara> + </listitem> + <listitem> + <simpara> + 4. A bináris nullkarakter használata megengedett a tárgyszövegben, de + a mintában nem, mert a mintául szolgáló sztring nullvégû C sztringként + adódik át. A "\0" vezérlõszekvencia használható a mintában bináris + nullkarakter megjelenítésére. + </simpara> + </listitem> + <listitem> + <simpara> + 5. Nem támogatja az alábbi Perl vezérlõszekvenciákat: + \l, \u, \L, \U, \E, \Q. Valójában ezek a funkciók a Perl + sztringkezelõ részében vannak megvalósítva, és nem tartoznak annak + mintaillesztõ motorjához. + </simpara> + </listitem> + <listitem> + <simpara> + 6. A Perl \G tesztjét nem támogatja, mivel nem fontos az egyszeres minta +illesztésekben. + </simpara> + </listitem> + <listitem> + <simpara> + 7. Magától érthetõdõen PCRE nem támogatja a (?{kód}) szerkezetet. + </simpara> + </listitem> + <listitem> + <simpara> + 8. A kézikönyv írása során néhány furcsaság még van a Perl 5.002_2-ben a + begyûjtött sztringek feltöltésével kapcsolatban, ha a mintarészek + ismétlõdhetnek. Például, "aba"-ra illesztve a /^(a(b)?)+$/ mintát + $2 numerikus változó értéke "b" lesz, míg a "aabbaa"-ra illesztve + /^(aa(bb)?)+$/ -t $2 üres marad. Mindamellett /^(aa(b(b))?)+$/ -ra + módosítva a mintát $2 és $3 is beállításra kerül. Perl 5.004-ben + $2 mindkét esetben beállításra kerül, mint ahogy ez a PCRE-re is + igaz. Ha a jövõben a Perl-ben ezt egységesíteni fogják, akkor PCRE + követni fogja ezt. + </simpara> + </listitem> + <listitem> + <simpara> + 9. Másik mindeddig megoldatlan eltérés, hogy pl. /^(a)?(?(1)a|b)+$/ + minta Perl 5.002_2-ben illeszkedik a "a"-ra, míg PCRE-ben nem. Ráadásul + mind Perl-ben mind PCRE-ben /^(a)?a/ minta "a"-ra illesztése során a $1 + változó üresen marad. + </simpara> + </listitem> + <listitem> + <para> + 10. PCRE néhény bõvítést is nyújt a Perl reguláris kifejezéseinek + lehetõségeihez: + <orderedlist> + <listitem> + <simpara> + (a) Jóllehet a hátratekintõ tesztek csak rögzített hosszúságú + sztringekre illeszkedhetnek, az alternatív ágak mindegyikében különbözõ + hosszúságú sztringre illeszkedõ minta adható meg. Perl 5.005-ben minden + ágban ugyanakkorának kell lennie ennek a hossznak. + </simpara> + </listitem> + <listitem> + <simpara> + (b) Ha a <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> + be van kapcsolva, és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> nincs bekapcsolva, + akkor $ metakarakter csakis a sztring legvégére illeszkedik. + </simpara> + </listitem> + <listitem> + <simpara> + (c) Ha <link linkend="pcre.pattern.modifiers">PCRE_EXTRA</link> be van + kapcsolva, akkor bármilyen külön jelentéssel nem bíró karakter elõtti + visszaperjel hibának minõsül. + </simpara> + </listitem> + <listitem> + <simpara> + (d) Ha <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> be van + kapcsolva, akkor a kvantorok (sokszorozók) mohóságát fordítva értelmezi, + azaz, alapértelmezés szerint nem mohók, csak ha egy kérdõjel ? áll utánuk. + </simpara> + </listitem> + </orderedlist> + </para> + </listitem> + </orderedlist> + </para> + </refsect1> + + <refsect1 id="regexp.reference"> + <title>A reguláris kifejezések részletei</title> + <refsect2 id="regexp.introduction"> + <title>Bevezetés</title> + <para> + Az alábbiakban a PCRE által megvalósított reguláris kifejezések + szintaktikáját és szemantikáját adjuk meg. A reguláris kifejezések + leírása a Perl dokumentációnak része is, és néhány könyv is foglalkozik + vele, némelyik rengeteg példával. Jeffrey Friedl "Mastering Regular + Expression" c. könyve, amely az O'Reilly gondozásában jelent meg (ISBN + 1-56592-257-3) igen nagy mélységben tárgyalja a reguláris kifejezéseket. + Az itteni leírást referenciának szánjuk. + </para> + <para> + A reguláris kifejezés maga egy minta, amit a tárgyszövegre kell + illeszteni balról jobbra. A karakterek többsége maga helyett áll a + mintában, azaz csak saját magára illeszkedik a tárgyszövegben. Egy + egyszerû példán bemutatva az <literal>a gyors vörös róka</literal> minta + a tárgyszöveg azon részére illeszkedik, ami megegyezik vele (azaz ahol a + <literal>a gyors vörös róka</literal> elõfordul. + </para> + </refsect2> + <refsect2 id="regexp.reference.meta"> + <title>Metakarakterek</title> + <para> + A reguláris kifejezések ereje abban rejlik, hogy lehetõségünk van + vagylagosságot (alternatívákat) és ismétléseket megadni a mintában. + Ezeket a <emphasis>metakarakterek</emphasis> használatával lehet megadni, + amelyek nem saját maguk helyett állnak a mintában, hanem speciális + jelentéssel bírnak. + </para> + <para> + Két különbözõ típusú metakarakter létezik: + az egyik bárhol elõfordulhat a mintában, kivéve szögeletes zárójelek [] + között, és a másik, ami csak szögeletes zárójelek között azonosítható + metakarakterként. A szögletes zárójeleken kívüli metakarakterek: + <variablelist> + <varlistentry> + <term><emphasis>\</emphasis></term> + <listitem> + <simpara> + több karakterbõl álló vezérlõszekvencia kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>^</emphasis></term> + <listitem> + <simpara> + tárgyszöveg elejét (vagy sor elejét többsoros módban) jelenti + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>$</emphasis></term> + <listitem> + <simpara> + tárgyszöveg végét (vagy sor végét többsoros módban) jelenti + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>.</emphasis></term> + <listitem> + <simpara> + bármilyen karakterre illeszkedik, kivéve az újsor karaktert + (alapértelmezés szerint) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>[</emphasis></term> + <listitem> + <simpara> + karakterosztály definició kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>]</emphasis></term> + <listitem> + <simpara> + karakterosztály definició végét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>|</emphasis></term> + <listitem> + <simpara> + elágazás kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>(</emphasis></term> + <listitem> + <simpara> + részminta kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>)</emphasis></term> + <listitem> + <simpara> + részminta végét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>?</emphasis></term> + <listitem> + <simpara> + opcionálitást jelez (0 vagy 1 elõfordulást engedélyez), + vagy kibõvíti az elõtte álló ( jelentését, + és a kvantorok (sokszorozók) mohóságát befolyásolja + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>*</emphasis></term> + <listitem> + <simpara> + "0 vagy több" kvantor (sokszorozó) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>+</emphasis></term> + <listitem> + <simpara> + "1 vagy több" kvantor (sokszorozó) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>{</emphasis></term> + <listitem> + <simpara> + "min/max" kvantor (sokszorozó) kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>}</emphasis></term> + <listitem> + <simpara> + "min/max" kvantor (sokszorozó) végét jelzi + </simpara> + </listitem> + </varlistentry> + </variablelist> + + A minta szögletes zárójelek [] közötti részét karakterosztálynak hívjuk. + A karakterosztályokban engedélyezett metakarakterek a következõk: +<variablelist> + <varlistentry> + <term><emphasis>\</emphasis></term> + <listitem> + <simpara> + több karakterbõl álló vezérlõszekvencia kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>^</emphasis></term> + <listitem> + <simpara> + negálja az osztályt, kizáró / tagadó osztályt definiál, + de csak ha ez az elsõ karakter az osztályon belül + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>-</emphasis></term> + <listitem> + <simpara> + karaktertartományt jelez + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>]</emphasis></term> + <listitem> + <simpara> + lezárja a karakterosztályt + </simpara> + </listitem> + </varlistentry> + </variablelist> + A következõ fejezetek a metakarakterek használatát írják le. + </para> + </refsect2> + <refsect2 id="regexp.reference.backslash"> + <title>visszaperjel \</title> + <para> + A visszaperjel \ karakternek számos alkalmazása van. + Elõször is, ha nem alfanumerikus karakter követi, akkor annak bármilyen + különleges jelentését (metakarakterek) figyelmen kívül hagyja, és azt + mint maga helyett álló karaktert értelmezi. Ebben a minõségében mind + karakterosztályon belül mind kívül használható. + </para> + <para> + Például, ha "*" karaktert kell illeszteni, akkor "\*"-t kell írni a + mintában. Akármikor használható ez a szerkezet, akár a következõ karakter + egyébként metakarakterként lenne értelmezve, akár nem. (Egy kivétel van + lásd a ] karakternél - a fordító.) Ezért biztos módszer elõírni azt, hogy + minden nem alfanumerikus karakter maga helyett álljon, úgy, hogy + visszaperjelet (\) írunk elé. Különben ha a visszaperjelre szeretnénk + illeszteni, akkor "\\"-t kell írni. + </para> + <para> + Ha a minta <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosítóval van megadva, akkor minden olyan térközkaraktert figyelmen + kívül hagy, amely karakterosztályon kívül vagy karakterosztályon + kívüli "#" és azt követõ újsor-karakter között szerepel. Visszaperjellel + bevezetett térköz- vagy "#" karakterek a minta részét képezik. + </para> + <para> + A visszaperjel másik alkalmazása a nem nyomtatható karakterek kódolását + teszi láthatóvá a mintában. Nincs megszorítás a nem nyomtatható karakterek + megjelenésére, kivéve a mintát lezáró nullkaraktert. + Ha a minta szövegszerkesztés folyományaként áll elõ, akkor általában + könnyebb valamelyik alábbi vezérlõszekvenciát használni, mint az általuk + reprezentált karakter bináris alakját: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\a</emphasis></term> + <listitem> + <simpara> + csengõ karakter (hexadecimálisan 07) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\cx</emphasis></term> + <listitem> + <simpara> + "control-x", ahol x bármilyen karakter lehet + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\e</emphasis></term> + <listitem> + <simpara> + "escape" (hexadecimálisan 1B) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\f</emphasis></term> + <listitem> + <simpara> + lapdobás (hexadecimálisan 0C) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\n</emphasis></term> + <listitem> + <simpara> + újsor (hexadecimálisan 0A) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\r</emphasis></term> + <listitem> + <simpara> + kocsivissza (hexadecimálisan 0D) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\t</emphasis></term> + <listitem> + <simpara> + tabulátor (hexadecimálisan 09) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\xhh</emphasis></term> + <listitem> + <simpara> + hh hexadecimális kódú karakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\ddd</emphasis></term> + <listitem> + <simpara> + ddd oktális kódú karakter, vagy "hivatkozás" + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + A "<literal>\cx</literal>" feloldása precízen megfogalmazva a következõ: + ha "<literal>x</literal>" kisbetû, akkor nagybetûvé konvertálódik. Ezután + a karakter 6. bitjét (hexadecimálisan 40) invertálja. Ilyenformán + "<literal>\cz</literal>"-ból hexadecimális 1A lesz, de + "<literal>\c{</literal>"-ból hexadecimális 3B lesz, míg + "<literal>\c;</literal>"-ból hexadecimális 7B. + </para> + <para> + A "<literal>\x</literal>" után két hexadecimális számjegy kerül + beolvasásra (a betûk lehetnek kis és nagybetûk is). + </para> + <para> + A "<literal>\0</literal>" után két további oktális számjegy kerül + beolvasásra. Minden esetben - még ha kevesebb, mint két számjegy került + is megadásra - a meglevõ számjegyek lesznek felhasználva. Ekképpen + "<literal>\0\x\07</literal>" egy olyan sorozatot definiál, ahol két + bináris nullkaraktert követ egy csengõkarakter. Bizonyosodj meg affelõl, + hogy mindig van két számjegy a kezdõ 0 után, ha a következõ karakter + oktális számjegy! + </para> + <para> + A nem 0-val folytatódó visszaperjel kezelése bonyolult. Karakterosztályon + kívül PCRE ezt és a soron következõ számjegyeket tízes + számrendszerbeli számként értelmezi. Ha szám 10-nél kisebb vagy + legalább ezzel a számmal egyezõ "gyûjtõ" nyitó zárójel elõzi meg a + kifejezésben, akkor az egész sorozatot <emphasis>hivatkozás</emphasis>ként értelmezi. + Késõbb a zárójelezett részminták fejezetében részletesen tárgyaljuk, + hogyan használható is ez. + </para> + <para> + Karakterosztályon belül vagy ha a tízes számrendszerbeli szám nagyobb, + mint 9 és nincs ennyi számú "gyûjtõ" részminta, akkor PCRE újraolvassa a + visszaperjelet követõ három oktális karaktert, és egy bájtra váltja a 8 + legkisebb helyiértékû bitet. Bármely rákövetkezõ számjegy maga helyett + áll, magára illeszkedik. + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\040</emphasis></term> + <listitem> + <simpara> + egy másik módja a szóköz megadásának + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\40</emphasis></term> + <listitem> + <simpara> + ugyanaz mint elõbb, ha biztosított, hogy 40-nél kevesebb "gyûjtõ" +részminta van elõtte + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\7</emphasis></term> + <listitem> + <simpara> + mindig hivatkozásként értelmezi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\11</emphasis></term> + <listitem> + <simpara> + hivatkozás is lehet, vagy a tabulátort írhatjuk így + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\011</emphasis></term> + <listitem> + <simpara> + mindig tabulátort jelent + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\0113</emphasis></term> + <listitem> + <simpara> + tabulátor és utána egy "3" + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\113</emphasis></term> + <listitem> + <simpara> + 113-as oktális kódú karakter ("K"), mivel hivatkozások száma nem + lehet több, mint 99 + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\377</emphasis></term> + <listitem> + <simpara> + egy olyan bájt, ami teljes egészében 1 értékû biteket tartalmaz + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\81</emphasis></term> + <listitem> + <simpara> + akár hivatkozás is lehet, vagy egy bináris nullkarakter és utána két + karakter egy "8" és egy "1" + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Figyelj arra, hogy 100-nál nagyobb oktális értékek elé nem szabad + bevezetõ 0-t írni, mert mindig csak három oktális kerül beolvasásra. + </para> + <para> + Minden sorozat, ami egy egyszerû bájtot határoz meg, karakterosztályon + belül és kívül is használható. Ráadásul karakterosztályokon belül a + "<literal>\b</literal>" szekvencia "visszatörlés" karakterként + (backspace) (hexadecimálisan 08) jelent. Ennek karakterosztályokon + kívül más jelentése van (lásd alább). + </para> + <para> + A visszaperjel harmadik alkalmazási módja általános karakterfajták + megadása: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\d</emphasis></term> + <listitem> + <simpara> + bármilyen tízes számrendszerbeli számjegy (decimális) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\D</emphasis></term> + <listitem> + <simpara> + bármilyen karakter, ami nem tízes számrendszerbeli számjegy + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\s</emphasis></term> + <listitem> + <simpara> + bármilyen térközkarakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\S</emphasis></term> + <listitem> + <simpara> + bármilyen nem térközkarakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\w</emphasis></term> + <listitem> + <simpara> + bármilyen "szóépítõ" karakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\W</emphasis></term> + <listitem> + <simpara> + bármilyen nem "szóépítõ" karakter + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Mindegyik szekvenciapár két diszjunkt (egymással nem átfedõ) részre + osztja a karakterek teljes halmazát. Minden karakter csakis a párok egyik + felébe tartozik. + </para> + <para> + "Szóépítõ" karakter minden betû vagy számjegy vagy aláhúzás, azaz + minden olyan karakter, amit egy Perl-típusú "<literal>szónak</literal>" + része lehet. A betûk és számjegyek értelmezése a PCRE + karaktertáblázataitól függ, amelyek változhatnak ha nyelvi beállítástól + függõen. Például, "fr" (vagy "hu" - a fordító) nyelvi beálllítás esetén + 128-nál magasabb kódú karakterek használatosak az ékezetes betûkhöz, + amelyekre illeszkedik a <literal>\w</literal>. + </para> + <para> + Ezek a karakterfajták mind karekterosztályokon belül és kívül is + alkalmazhatók. Mindegyik csak egy, a neki megfelelõ karakterre + illeszkedik. Ha az aktuális illeszkedési pont a tárgyszöveg vége, akkor + mindegyik sikertelen lesz, mert egyáltalán nincs karakter, amire + illeszteni lehetne. + </para> + <para> + A visszaperjelet végül de nem utolsósorban néhány egyszerû teszt + megadására használhatjuk. A tesztek (assertion) olyan feltételek, + amelyeknek az illesztés adott pontján kell teljesülnie anélkül, hogy a + tárgyszöbegbõl karaktereket használnának el - és így karaktereket + vennének el az illesztéstõl. Késõbb megadjuk, hogy hogyan használhatók + a részminták összetettebb tesztek megadásához. + A "visszaperjeles" tesztek: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\b</emphasis></term> + <listitem> + <simpara> + szóhatár + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\B</emphasis></term> + <listitem> + <simpara> + nem szóhatár + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\A</emphasis></term> + <listitem> + <simpara> + tárgyszöveg kezdete (függetlenül többsoros üzemmódtól) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\Z</emphasis></term> + <listitem> + <simpara> + tárgyszöveg vége vagy újsor karakter a végén (függetlenül többsoros + üzemmódtól) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\z</emphasis></term> + <listitem> + <simpara> + tárgyszöveg vége (függetlenül többsoros üzemmódtól) + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Ezek a tesztek karakterosztályokban nem használhatók. (Figyeld meg, hogy + "<literal>\b</literal>"-nek eltérõ jelentése van karakteroszályokon + belül, nevezetesen itt a "visszatörlés" karakter helyett áll.) + </para> + <para> + A szóhatár a tárgyszöveg azon poziciója, ahol az aktuális és az azt + megelõzõ karakterek fajtája <literal>\w</literal> illetve <literal>\W</literal> vagy fordítva + (az egyik <literal>\w</literal>-re illeszkedik, míg a másik <literal>\W</literal>-re), vagy a tárgyszöveg eleje illetve + vége, ha az elsõ illetve utolsó karakter a <literal>\w</literal>-re + illeszkedik. + </para> + <para> + A <literal>\A</literal>, <literal>\Z</literal> és <literal>\z</literal> tesztek különböznek a hagyományos kalap(os ékezet) "^" és + dollárjel "$" szimbólumoktól, mert az elõbbiek minden esetben csakis a + tárgyszöveg legelejére illetve legvégére illeszkednek. Nem befolyásolja a + viselkedésüket sem <link linkend="pcre.pattern.modifiers">PCRE_NOTBOL</link> sem <link +linkend="pcre.pattern.modifiers">PCRE_NOTEOL</link> módosító. + A <literal>\Z</literal> és <literal>\z</literal> közti különbség annyi, hogy a <literal>\z</literal> csak a tárgyszöveg végére + illeszkedik, míg <literal>\Z</literal> az esetlegesen a tárgyszöveg végén lévõ újsor karakter elõtt is. + </para> + </refsect2> + <refsect2 id="regexp.reference.circudollar"> + <title>kalap(os ékezet) ^ és dollárjel $</title> + <literallayout> + Karakterosztályokon kívül az alapértelmezett illesztési + üzemmódban a kalap(os ékezet) egy olyan tesztet jelent,amely + csak akkor és csak is akkor igaz (&true;), ha a pillanatnyi + illesztési pont a tárgyszöveg kezdete. Karakterosztályokon + belül teljesen más jelentése van (lásd alább). + + A kalapnak akkor nem szükséges a minta legelején állnia, ha + több választási lehetõség is fennáll (lásd: retesz pipa + csõvezeték |), de minden választható ágban a legelsõnek kell + lennie, ha azt akarod, hogy a minta valaha is illeszkedjen. + Ha mindegyik lehetséges ág "kalappal" kezdõdik, azaz ha a + minta mindenesetben csak a tárgyszöveg elejétõl kezdve + illeszkedhet, akkor "(le)rögzített" mintáról beszélünk. + (Más módja is van, hogy egy mintát "rögzíts".) + + A dollárjel olyan tesztet jelent, amely csak akkor és csakis + akkor igaz (&true;), ha a pillanatnyi illesztési pont a + tárgyszöveg vége vagy egy újsor karakter elõtti pozició - az + alapértelmezés szerint. A dollárjelnek akkor nem szükséges a + minta legvégén állnia, ha több választási lehetõség is fennáll + (lásd: retesz pipa csõvezeték |),de minden választható ágban + - ahol szerepel - a legutolsónak kell lennie. A dollárjelnek + nincs külön jelentése karakterosztályokon belül. + + A dollárjel jelentése megváltozik és csak a tárgyszöveg + végére illeszkedik, ha a <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> módosító be van + kapcsolva a minta fordításakor / kiértékelésekor vagy az + illesztés pillanatában. Ez nem érinti a <literal>\Z</literal> tesztet. + + A kalap(os ékezet) és a dollárjel jelentését megváltoztatja + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító bekapcsolása. Ebben az esetben a + közbensõ "\n" újsorkarakterek közvetlen elõtti illetve utáni + pozicióira is illeszkednek a tárgyszöveg eleji és végi + pozición felül. Például, így a <literal>/^abc$/</literal> minta többsoros + üzemmódban illeszkedik a "def\nabc" szövegre, de egyébként + nem. Következésképpen az egysoros üzemmódban "rögzítettnek" + tekintett minták, nem "rögzítettek" többsoros üzemmódban, + mert ekkor "^"-kal kezdõdõ vagylagos ágak nem tekinthetõk + "rögzítettnek". A <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> módosítót figyelmen kívül hagyja, ha a + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link>, módosító be van kapcsolva. + + Figyelj arra, hogy a \A, \Z és \z szekvenciák mindkét + üzemmódban használhatók a tárgyszöveg elejére illetve végére + illesztésben, és ha minden vagylagos ág \A -val kezdõdik, + akkor a minta mindig "rögzített" lesz akármi is a + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító állapota. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.dot"> + <title>pont .</title> + <literallayout> + Karakterosztályokon kívül a pont bármelyik karakterre + illeszkedik beleértve minden nem nyomtatható karaktert is, + kivéve az újsort - alapértelmezés szerint. Ha a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + be van kapcsolva, akkor az újsor karakterre is illeszkedik. + A pont kezelése teljesen független a kalap(os ékezet) ^ és + a dollárjel $ kezelésétõl, az egyetlen közös hármukban, hogy + mindegyiknek köze van az újsor karakterhez. A pontnak nincs + speciális jelentése karakterosztályokon belül. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.squarebrackets"> + <title>Szögeletes zárójel []</title> + <literallayout> + A nyitó szögeletes zárójel egy karakterosztály kezdetét, míg + a záró párja annak végét jelzi. A bezáró zárójel önmagában + nem hordoz speciális jelentést. Ha egy ] karaktert kell a + karakterosztályon belül megadni, akkor annak vagy legelöl + kell állnia - az esetleges kalap(os ékezet) után -, vagy egy + visszaperjelet kell eléírni. + + A karakterosztályok csak a tárgyszöveg egyetlen karakterére + illeszkednek. Ha a karakterosztály legelsõ karaktere nem a + kalap(os ékezet) ^,akkor ez csak a karakterosztályba tartozó + karakterek valamelyikére illeszkedik, ha a legelsõ karakter + kalap(os ékezet) ^ , akkor pedig csak azokra, amelyek nem + elemei az osztálynak. (Ez utóbbit hívjuk tagadó vagy kizáró + karakterosztálynak - a fordító.) Ha a kalap(os ékezet) ^ + karaktert kell megadni egy karakterosztály elemeként, akkor + az nem lehet a legelsõ pozicióban, vagy visszaperjelet kell + eléírni. + + Az [aeiou] karakterosztály például minden kisbetûs ékezet + nélküli magánhangzóra illeszkedik, míg az [^aeiou] pont + ezekre nem. A kalap(os ékezet) kényelmes jelölési forma olyan + karakterosztályok megadására, ahol a kizárandó elemeket + könnyebb felsorolni. Ez nem teszt, ez karaktereket használ + el a tárgyszövegbõl, ezért a tárgyszöveg végén az illesztés + sikertelen lesz. + + Amikor a kis- és nagybetûk különbözõsége nem számít, akkor a + betûk a kis- és nagybetûs alakjukat is képviselik, tehát + ilyen esetben például [aeiou] illeszkedik az "A"-ra és az + "a"-ra is, és az [^aeiou] nem illeszkedik a "A"-ra, csak ha + a kis- és nagybetû különbözõsége számít. + + Karakterosztályokban az újsort soha nem kezelik különleges + módon, bármi is a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító értéke. + A kizáró karakterosztályok mint például [^a] pedig mindig + illeszkednek az újsor karakterre. + + Az "-" elválasztójellel karaktertartományokat lehet megadni + a karakterosztályon belül. A [d-m], például, a d és m közti + bármelyik karakterre illeszkedik - d-t és m-et is beleértve. + Ha az elválasztójelet kell a karakterosztályon belül megadni, + akkor vagy egy visszaperjelet kell eléírni, vagy olyan + pozicióban kell megadni, ahol nem lehet tartományképzõként + értelmezni, jellemzõen a karakterosztály elsõ vagy utolsó + tagjaként. + + A "]" karaktert ebben a literális formában nem lehet egy + tartomány záró tagjaként használni. A [W-]46] minta például + azt jelenti, hogy a "W" és "-" karakterek valamelyikét + kövesse a "46]" sztring, ezért a "W46]" vagy "-46]" + illeszkedik a mintára. Ha azonban visszaperjelet írunk elé, + akkor a visszaperjel lesz a tartomány felsõ határa, és ekkor + "[W-\]46]" mintát egy egyszerû osztályként értelmezi, amit + három különálló karakter követ. Oktális vagy hexadecimális + ábrázolásban lehet megadni a "]"-t mint tartományt lezáró + karaktert. + + A tartományok meghatározásakor az ASCII karaktertáblázat + karakterkódjai számítanak, a karakterek helyett a numerikus + kódjaik is használhatók, például [\000-\037]. Ha kis- és + nagybetûkre nem érzékeny az illesztés és a tartomány betûket + is felölel, akkor azok mind a kis- mind a nagybetûs + alakjuknak megfelelõ karaktereket egyaránt helyettesítik, + például a [W-c] ugyanaz, mint a [][\^_`wxyzabc] , és ha a + "fr" nyelvi beállítást használjuk, akkor a [\xc8-\xcb] minta + illeszkedik minden ékezetes e illetve E karakterre. + (franciában van pár ilyen :) + + A Karakterosztályokhoz karakterfajtákat - \d, \D, \s, \S, \w + és \W -t - is hozzáadhatunk, és így a fajtába tartozó + karaterekkel bõvíthejük. A [\dABCDEF] - például - minden + hexadecimális számjegyre illeszkedik . A kalap(os ékezet)-t + a nagybetûs (tagadó) fajtákkal együtt használva kényelmesen + megadható a kisbetûs párjuknál korlátozotabb halmaz.A [^\W_] + karakterosztály minden betûre és számjegyre illeszkedik, de + az aláhúzásra nem (ami ugyancsak eleme a \w-nek). + + A \, -, a kezdõ ^ és a záró ] karakterektõl eltekintve a + nem alfanumerikus karaktereknek nincs különleges jelentésük + a karakterosztályokon belül, de nem okoz gondot, ha esetleg + visszperjel elõzi meg ezeket. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.verticalbar"> + <title>Retesz, pipa, csõvezeték |</title> + <literallayout> + A "|" karakterrel vagylagos - alternatív - mintákat lehet + megadni, pontosabban azokat választja el egymástól. Például + + gyula|sacika + + minta illeszkedik a "gyula" és a "sacika" szövegre is. + Bármennyi vagylagos / választható mintát fel lehet sorolni, + köztük az üres mintát is, ami az üres sztringre illeszkedik. + Az illesztés a mintákat balról jobbra, egymás után sorjában + veszi, és a legelsõ sikeresen illesztett lesz használva. A + részmintákban használt vagylagos ágak esetében a "sikeresen" + azt jelenti, hogy a minta fennmaradó részét is sikerül + illeszteni. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.internal-options"> + <title>Módosítók mintán belüli beállításai</title> + <literallayout> + A <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> , <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> , <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> és <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosítókat a minta belsejében is átállíthatjuk "(?" és ")" + közé írt Perl-beli betûjelzéseikkel. Ezek a betûk: + + i = <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> + m = <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> + s = <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + x = <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + + A "(?im)" bekapcsolja a többsoros és a "kis-nagybetû mindegy" + üzemmódot. Kikapcsolni az egyes beállításokat az eléjük írt + kötõjellel lehet, valamint a módosítók együttes állítása is + megengedett,például a (?im-sx) bekapcsolja a <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link>-t + és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link>-t valamint kikapcsolja <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link>-t + és <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link>-t. + Ha egy betûjelzés a kötõjel mindkét oldalán szerepel, akkor + a módosító ki lesz kapcsolva. + + Ezeknek a beállításoknak az érvényességi köre attól függ, + hogy a mintán belül hol fordulnak elõ. Minden részmintán + kívüli beállítás olyan, mintha az illesztés kezdetén lett + volna megadva, ezért a következõ minták tökéletesen ugyanúgy + mûködnek: + + (?i)abc + a(?i)bc + ab(?i)c + abc(?i) + + , ami ugyanaz, mintha az "abc" mintát <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> módosítóval + adtuk volna meg. Másszóval a legfelsõ szintû beálllítások az + egész mintára érvényesek, hacsak egy részmintában felül nem + bírálod azokat. Ha a módosítónak több beállítása is szerepel + a legfelsõ szinten, akkor a jobbról legutolsó fog érvényre + jutni. + + Ha részmintán belül történik módosítóváltoztatás, akkor a + hatás különbözõ (Perl 5.005 viselkedésbeli változása). + A részmintán belüli módosító-állítás csak a részminta + hátramaradó részét érinti, ezért + + (a(?i)b)c + + minta csak az "abc" és "aBc" szövegekre illeszkedik feltéve, + hogy <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> módosítót nem adtuk meg. Ez azt + jelenti, hogy a minta különbözõ helyein a módosítók más és + más értékeit lehet beállítani. Bármilyen változtatás egy + vagylagos (választható) ágban a következõ ágakra is hatással + van ugyanabban a részmintában, például + + (a(?i)b|c) + + minta illeszkedik az "ab", "aB", "c" és "C" szövegekre még + akkor is, ha "C"-re illeszkedve az nem is az elsõ ágra esett + a választás, ahol a módosító be lett állítva. Ennek az az + oka, hogy a módosító beállítások hatásai már a kifejezés + fordításakor / kiértékelésekor rögzülnek, máskülönben néha + nagyon furcsa viselkedést tapasztalhatnánk. + + A PCRE-specifikus <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> és <link linkend="pcre.pattern.modifiers">PCRE_EXTRA</link> módosítókat a + Perl-kompatibilisekhez hasonló módon állíthatók, az U és X + karakterek használatával.A (?X) beállítás különleges, mert - + még a legfelsõ szinten is - mindig hamarabb kell szerepelnie + a mintában, mint a további kapcsolóknak. Legjobb a minta + legelejére rakni. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.subpatterns"> + <title>Részminták</title> + <literallayout> + A részminták egymásba ágyazhatók, és kerek zárójel fogja + közre õket. A minta egy darabját részmintaként szerepeltetni + két dolgot jelent: + + 1. Elágazási lehetõségek helyét jelöli ki (csoportosítás): + + szél(toló|kakas|) + + minta illeszkedik a "szél", "széltoló" vagy "szélkakas" + szavak egyikére. Zárójel nélkül a "széltoló"-ra, a "kakas"-ra + vagy az üres sztringre illeszkedne. + + 2. A részmintát "gyûjtõ" részmintává változtatja. Ha a + teljes mintát sikerült illeszteni, akkor a tárgyszöveg azon + részei, amelyek a "gyûjtõ" részmintákra illeszkedtek, + a <function>pcre_exec</function> függvény <emphasis>ovector</emphasis> paraméterében a hívó + függvénynek lesznek átadva. + A kerek nyitó zárójelek számozása balról jobbra 1-tõl kezdve + történik, és "gyûjtõ" részminták (sor)számát adják. + + Például, ha az "a vörös király" szöveget illesztjük + + a ((vörös|sápadt) (király|királynõ)) + + mintára, akkor a megtalált / begyûjtött szövegrészek : + 1. "vörös király", 2. "vörös" és 3. "király". + + Az a tény, hogy a kerek zárójelnek kettõs szerepe van, nem + minden esetben hasznos. Sokszor elõfordulhat, hogy csak a + csoportosító funkcióra van szükségünk "begyûjtés" nélkül. + Erre szolgál a nyitó zárójel után irható "?:" karaktersorozat + , mert ekkor a részminta nem gyûjti be / tárolja el a + ráilleszkedõ szövegrészt, és nem is számít bele a következõ + "gyûjtõ" részminták sorszámozásába. Az elõzõ példánál maradva + "a sápadt királynõ" + + a ((?:vörös|sápadt) (király|királynõ)) + + mintára illesztve a megtalált / begyûjtött részminták : + 1. "sápadt királynõ" és a 2. "királynõ". + A "gyûjtõ" részminták száma legfeljebb 99 lehet,és az összes + részminta "gyûjtõ" és "nem-gyûjtõ" együtt legfeljebb 200. + + Ha egy nem-gyûjtõ részminta elején módosítókat kell állítani, + akkor kényelmes rövidítésként használható, hogy a módosítók + betûjelei a "?" és a ":" közé írhatók. Ebbõl adódóan az + alábbi két minta + + (?i:szombat|szerda) + (?:(?i)szombat|szerda) + + pontosan ugyanazokra a sztringekre illeszkedik. + Mivel a vagylagos / választható ágak próbálgatása balról + jobbra történik, és a módosító hatása addig él, amíg a + részminta le nem zárul, az egyik ágban beállított módosító + hatással van a következõ ágra is, ezért a fenti minta + illeszkedik a "SZERDA" és "Szombat" szavakra is. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.repetition"> + <title>ISMÉTLÉSEK</title> + <literallayout> + Az ismétléseket kvantorokkal (sokszorozókkal) lehet megadni + + egyszerû karakter (esetleg visszaperjellel bevezetve), + . metakarakter, + karakterosztály, + hivatkozás (következõ szakasz) vagy + zárójeles részminta (nem teszt) + + után. + + Az általános ismétlõ kvantor (sokszorozó) - kapcsos + zárójelben vesszõvel elválasztva - írja elõ azt minimális és + maximális elõfordulási számot, ahányszor a mintát illeszteni + kell illetve lehet. Ezeknek 65536-nél kisebbnek kell lenniük, + és az elsõ legfeljebb annyi lehet, mint a második. Például a + + z{2,4} + + minta illeszkedik a "zz", "zzz" vagy "zzzz" szövegekre. + Az egymagában álló záró kapcsos zárójel nem bír speciális + jelentéssel. Ha a második számot nem adjuk meg, de a vesszõ + szerepel, akkor az illesztésnek nincs felsõ határa, de ha a + vesszõt is elhagyjuk, akkor a kvantor (sokszorozó) pontosan + a megadott számú illesztést engedi csak. Ekképpen: + + [aáeéiíoóöõuúüû]{3,} + + legalább 3 egymást követõ magánhangzóra illeszkedik, de akár + többre is, míg a + + \d{8} + + csakis 8 darab számjegyre. Ha a nyitó kapcsos zárójel olyan + helyen szerepel, ahol kvantor nem szerepelhet, akkor betû + szerint lesz figyelembe véve, maga helyett áll a mintában. A + {,6} például nem kvantor (sokszorozó), hanem egy négy + karakteres minta betû szerint értelmezve. + + A {0} kvantor (sokszorozó) megengedett, és hatása olyan, + mintha az elõtte álló mintaelem és maga a kvantor nem is + szerepelne. + + Kényelmi és történelmi okokból három, gyakori kvantornak + létezik rövidítése is: + + * egyenlõ {0,} - val + + egyenlõ {1,} - val + ? egyenlõ {0,1} - val + + Végtelen ciklusokat is lehet definiálni úgy, ha egy olyan + részmintát sokszorozzunk felsõhatár nélkül, amelynek nem + muszáj illeszkednie egyetlen karakterre sem, például: + + (a?)* + + Perl és PCRE korábbi verziói hibát jeleztek az ilyen minták + kiértékelésekor / fordításakor. Azonban vannak esetek,amikor + ezek a minták is hasznosak lehetnek, ezért ezeket a mintákat + most már elfogadják, de ha a részminták ismételten nem + illeszkednek egy karakterre sem, a ciklust erõszakkal + megszakítják. + + + Alapértelmezés szerint a kvantorok (sokszorozók) "mohók" , + azaz amennyi karakterre csak illeszteni tudnak, azt mind + elhasználják a tárgyszövegbõl - a felsõ ismétlési határ + figyelembe vétele mellett - anélkül,hogy a minta többi része + sikertelenül illeszkedne. + A klasszikus példa, ahol ez problémát okoz, a C forráskódok + megjegyzéseire illeszkedõ kifejezés. Ezek a megjegyzések nem + egymásba ágyazhatók, /* és */ közé írt tetszõleges szövegek, + amelyekben szerepelhet a * és / jel is (nem egymás mellett). + + /\*.*\*/ + + mintát a + + /* elsõ megjegyzés */ c_code(); /* második megjegyzés */ + + C forrásrészletre illesztve kudarcot vallunk - köszönhetõen + a .* elem mohóságának. (Az illesztés sikeres, csak nem arra + való, amire szerettük volna - a fordító). + + Ha azonban a kvantort (sokszorozót) kérdõjel ? követi, akkor + ez megszünteti annak mohóságát, és csak a lehetõ legkevesebb + illesztést engedi, ezért a + + /\*.*?\*/ + + minta az, ami C forráskódú megjegyzésekre való. A különbözõ + kvantorok (sokszorozók) jelentése egyébként nem változik + ettõl, csak az elõnyben részesített illeszkedési számuk. A + kérdõjelnek ez a szerepe nem összetévesztendõ a feltételes + kvantorral (sokszorozóval), mert a kérdõjelet kétféleképpen + és néha megkettõzve használjuk, például: + + \d??\d + + egy számjegyre illeszkedik leginkább, és csak akkor kettõre, + ha a minta maradék része másképp nem illeszkedne. + + Ha a <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> módosító be van kapcsolva, akkor + a kvantorok (sokszorozók) alapértelmezés szerint nem mohók + (szerények :), csak ha egykérdõjel követi õket. Másszóval, a + kérdõjel átállítja a kvantorok alapértelmezés szerinti + viselkedését. + + Amikor egy zárójelezett részminta egynél többször vagy + legfeljebb meghatározott számban ismétlõdhet, akkor a + kiértékelt minta több memóriát foglal el a minimális és + maximális elõfordulással arányosan. + + Ha a minta .* -val vagy .{0,} -val kezdõdik és a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + módosító (Perl-beli /s-nek megfelelõje) be van kapcsolva, és + így a . illeszkedik az újsor karakterre is, akkor a minta + hallgatólagosan "rögzített" lesz, mert bármi is következik + utána, az a tárgyszöveg minden karakterpoziciójára "rá lesz + próbálva", így nincs az elsõn kívül más karakterpozició, + ahonnan az egész illesztés újrakezdõdhetne. PCRE az ilyen + mintákat úgy tekinti, mintha \A-val kezdõdne. Azokban az + esetekben, amikor tudjuk, hogy a tárgyszöveg nem tartalmaz + újsorkaraktereket és a minta .* -gal kezdõdik, érdemes + beállítani a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> módosítót vagy ^ -t használni + a "rögzítés" eléréséhez, hogy ezt az optimalizálást + kieszközöljük. + + Ha a "(be)gyûjtõ" részminta az illesztés során ismételten + felhasználásra kerül, akkor a begyûjtött / megtalált szöveg- + rész az utolsó ismétlésben illeszkedõ rész lesz. Például a + + (csori[keat]{3}\s*)+ + + minta a "csorikea csoriaet" történõ illesztése után a + begyûjtött / megtalált szövegrész "csoriaet" lesz. Egymásba + ágyazott részminták esetén a begyûjtött érték lehet, hogy az + elõzõ lépésben lett beállítva, például: + + /(a|(b))+/ + + illesztve a "aba" -ra a második begyûjtött szövegrész a "b". + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.back-references"> + <title>HIVATKOZÁSOK</title> + <literallayout> + Karakterosztályon kívül visszaperjelet követõ számjegy(ek) a + mintában korábban elõforduló "gyûjtõ" részmintára történõ + hivatkozásnak minõsül(nek), ha a számnak megfelelõ "gyûjtõ" + részminta nyitó kerek-zárójele ( elõfordult már a mintában. + + Ha azonban ez a tízes számrendszerbeli szám 10-nél kisebb, + akkor mindig hivatkozásnak minõsül, s csak akkor okoz hibát, + ha nincs ennyi "gyûjtõ" részminta megnyitva az egész mintán + belül. Magyarán a 10-nél kisebb sorszámú kerek nyitó + zárójeleknek nem kell a hivatkozás elõtt, a mintában ettõl + balra állniuk. Olvasd el a "visszaperjel \" szakaszt, ahol + részletesen olvashatsz arról, hogy miképpen kezeli a PCRE a + visszaperjel után álló számjegyeket. + + A hivatkozások az általuk megcímzett "gyûjtõ" részmintákra + ténylegesen illeszkedõ szövegrészeket testesítik meg, és nem + azokat, amelyre illeszkedthetek volna egyébként. Mindjárt + megvilágítjuk egy példán keresztül: + + (ért|kegy) és \1elem + + illeszkedik a "kegy és kegyelem"-re és "ért és értelem"-re, + de nem illeszkedik az "ért és kegyelem"-re. + Ha a kis- és nagybetûk különbsége érvényben van a hivatkozás pillanatában, akkor számít a betûalakok különbsége. Például + + ((?i)rah)\s+\1 + + minta illeszkedik a "rah rah" és "RAH RAH" szövegekre, de a + "RAH rah" -ra még akkor sem, ha az eredeti "gyûjtõ" + részmintában a kis- és nagybetûk különbsége nem számított. + + Egy részmintára több hivatkozás is utalhat. Ha a részminta + ténylegesen nem lett felhasználva az illesztés során, akkor + bármilyen hivatkozás rá hibát jelent. Például + + (a|(bc))\2 + + minta mindig hibázik, ha az illesztés "a"-val kezdõdött és + nem "bc"-vel.Mivel legfeljebb 99 hivatkozás lehet egy mintán + belül, minden visszaperjel után álló számjegy egy lehetséges + hivatkozás részét képezheti. Ha a mintát számjeggyel + kellene folytatni, akkor a hivatkozás végét valamilyen + elválasztókarakterrel kell jelezni. Ha <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> módosító + be van kapcsolva, akkor ez bármilyen térközkarakter lehet, + egyébként egy üres megjegyzés is megfelel. + + Azok a hivatkozások, amelyek magára a hivatkozást tartalmazó + részmintára utalnak,a részminta elsõ illesztésekor hibáznak, + ezért például (a\1) soha nem illeszkedik semmire. Azonban az + ilyen hivatkozások is értelmet nyerhetnek, például az alábbi + minta + + (a|b\1)+ + + illeszkedik a csupa "a"-ból álló és az "aba", "ababaa" s + ehhez hasonló sorozatokra. A részminta illesztés minden + iterációjában a hivatkozás az elõzõ iterációnak megfelelõ + karaktersorozatra utal. Azért, hogy ez mûködjön, a mintának + olyannak kell lennie, hogy az elsõ lépésben nem kelljen a + hivatkozásnak illeszkednie.Ez vagylagos ágak vagy elhagyható + - minimálisan 0 ismétlést elõíró - kvantor (sokszorozó) + használatával megoldható. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.assertions"> + <title>TESZTEK FELTÉTELEK</title> + <literallayout> + Angolul "assertion"-nek nevezett szerkezet olyan tesztet + vagy feltételt jelent, ami a pillanatnyi illesztési pozició + elõtti vagy utáni karakterekre vonatkozik, de ténylegesen + nem használ el karaktereket a tárgyszövegbõl az illesztés + elõl, csak ellenõrzi egy feltétel fennállását. Az egyszerû + teszteket - \b, \B, \A, \Z, \z, ^ és $ - már tárgyaltuk. + Az ennél bonyolultabbakat részmintaként kell megadni.Kétféle + teszt van: az elõretekintõ, ami a pillanatnyi pozició utáni + karaktereket vizsgálja és a hátratekintõ, ami az az + elõttieket. + + A teszt részmintája a szokásos módon illeszkedik, attól + eltekintve, hogy a pillanatnyi illesztési poziciót nem + változtatja meg. Az elõretekintõ tesztek "(?=" vagy tagadó + feltétel esetén "(?!" sorozattal kezdõdnek, például + + \w+(?=;) + + illeszkedik minden szóra, amelyet pontosvesszõ követ, de a + pontosvesszõ nem szerepel az illeszkedésben, és az + + ize(?!bigyo) + + illeszkedik a "ize" minden olyan elõfordulására, amit nem a + "bigyo" követ. Nyilvánvaló, hogy egy hasonló minta + + (?!ize)bigyo + + nem azokat a "bigyo"-kat találja meg, amelyek elõtt nem "ize" + van; hanem minden "bigyo"-t megtalál, mert a (?!ize) teszt + mindig igaz, hiszen az utána jövõ három karakter tényleg nem + "ize", hanem "bigy" (tesztként nem változik a pillanatnyi + illesztési pozició - a fordító). Ahhoz, hogy a kívánt hatást + érjük el a hátratekintõ tesztre van szükségünk. + + A hátratekintõ tesztek (?<= vagy tagadó feltétel esetén + a (?<! sorozattal kezdõdnek, például + + (?<!ize)bigyo + + azokat a "bigyo"-kat találja meg, amelyek elõtt nincs "ize". + A hátratekintõ tesztek csak rögzített hosszúságúak lehetnek. + Ha azonban több alternatívát adunk meg a teszten belül, + a különbözõ ágaknak lehet eltérõ a hossza, ilyenformán + + (?<=tulok|szamár) + + megengedett, ellentétben a + + (?<!kutyus(ok)?|macsk(ák)?) + + mintával, amely kiértékelés / fordítás során hibát okoz. + Az eltérõ hosszúságú ágtesztek a hátratekintõ tesztek + legfelsõ szintjén megengedettek. Ez PCRE bõvítés a Perl + 5.005-höz képest,ahol minden ágtesztnek azonos hosszúságúnak + kell lennie. A + + (?<=ab(c|de)) + + mintához hasonló nem megengedett, mert a legfelsõ szinten + levõ egyetlen ág két különbözõ hosszúságú szövegre is + illeszkedhet, de átírható, hogy a vagylagosságot a felsõ + szintre emeljük: + + (?<=abc|abde) + + A hátratekintõ tesztek megvalósítása a következõ: minden + ágra a pillanatnyi illesztési pozició átmenetileg hátrébb + kerül az ágtesztnek megfelelõ számú karakterrel és ezután + illeszteni próbál. Ha nincs elég karakter a visszalépéshez, + az illesztés sikertelen lesz. A hátratekintõ tesztek az + egyszeri részmintákkal együtt különösen hasznosak lehetnek + a szöveg végi illeszkedéseknél, az "Egyszeri részminták" c. + szakasz végén található erre példa. + + Számos különbözõ fajtájú teszt állhat egymás után, például: + + (?<=\d{3})(?<!999)ize + + minta azokra az "ize"-kre illeszkedik, ami elõtt 3 számjegy + áll, amely nem a "999". Figyelj arra, hogy minden teszt + egymástól függetlenül, ugyanabban az illesztési pozicóban + kerül kiértékelésre. Elõször azt ellenõrzi, hogy a megelõzõ + három karakter számjegy-e és utána azt, hogy ezek nem a + "999"-t adják.Ez a minta nem azokra az "ize"-kre illeszkedik, + amelyek elõtt hat karakter áll: három számjegy és másik + három, ami nem a "999", példaképpen nem illeszkedik a + "123abcize" szövegre. Az a minta, ami ezt tudja a következõ: + + (?<=\d{3}...)(?<!999)ize + + Ebben az esetben az elsõ teszt a megelõzõ hat karaktert nézi, + és azt vizsgálja, hogy az elsõ három számjegy-e, ezután a + második feltétel a maradék három karaktert nézi, hogy azok + nem a "999" sorozat. A tesztek egymásba ágyazhatók bármilyen + komibinációban. Például a + + (?<=(?<!ize)bigyo)figyula + + arra a "figyula"-ra illeszkedik, amit egy "bigyo" elõz meg, + ami elõtt nem áll "ize". Miközben + + (?<=\d{3}(?!999)...)ize + + egy másik minta az olyan "ize"-kre, amelyek elõtt három + számjegy s ezután három olyan karakter áll, amely nem "999". + + A teszt-minták nem "gyûjtõ" részminták, és nem ismételhetõk, + hiszen nincs sok értelme ugyanazt többször tesztelni. + Ha bármilyen teszt "gyûjtõ" részmintát tartalmaz, akkor + ezek a részminták is beleszámítanak a "gyûjtõ" részminták + számozásába, azonban csak pozitív tesztekre lesz végrehajtva + a megtalált szövegrész "begyûjtése", mert tagadó tesztek + esetén ennek nincs értelme. + + A tesztek beleszámítanak a zárójelezett részmintákra + vonatkozó 200-as felsõ korlátba. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.onlyonce"> + <title>Egyszeri részminták</title> + <literallayout> + A mind a maximalizáló (mohó?) mind a minimalizáló (szerény?) + ismétlés esetén a következõ részek illesztésének a + sikertelensége általában az ismételt elem újbóli + kiértékelését eredményezi, hogy eltérõ számú ismétléssel + vajon a minta maradéka illeszkedik-e. Néhány esetben hasznos + ezt megelõzni akár a mintaillesztés viselkedésének + megváltoztatásával, vagy hagyni, hogy az illesztés hamarabb + elbukjon, mint egyébként, ha a minta készítõje (szóval te :) tudja, hogy nincs értelme folytatni. + + Nézzük a következõ példát, ahol a \d+ize mintát a + + 123456bigyo + + szövegre illesztjük. + Miután 6 számjeggyel végzett,az illesztés elbukik az "ize"-n + . Ekkor a szokásos lépés, hogy megpróbálja újból 5 majd 4 és + - és így tovább - eggyel kevesebb számjegyet illeszteni a + "\d+"-re , amíg végül minden lehetõséget kimerítve az + illesztés elbukik. Az egyszeri részminták azt a lehetõséget + biztosítják nekünk, hogy ha egyszer a minta egy darabja + illeszkedett, akkor az ne legyen újra és újra kiértékelve a + fenti módon, hanem az illesztés fejezõdjön be azonnal, ha az + "ize"-t nem tudja illeszteni mar az elso alkalommal. Ennek a + jelölésére egy speciális zárójelezés szolgál (?>) + + (?>\d+)bigyo + + Ez a zárójelféle lezárja a közrefogott részmintát, ha az + egyszer már illeszkedett,és az illesztés késõbbi sikertelen + szakaszában megakadályozza, hogy az illesztés visszalépjen + ebbe a részbe. Emellett azonban az elõzõ elemekre a + visszalépegetés a szokásos módon történik. +<!--Backtracking past it to previous items, however, works as normal.--> + + Másfajta leírása, hogy ez a fajta részminta úgy illeszkedik + a szövegre, mint ahogy egy, a pillanatnyi illesztési ponthoz + rögzített, de az eredetivel teljesen megegyezõ, önálló minta + lenne. + + Az egyszeri részminták nem "gyûjtõ" részminták. Egyszerû + esetekben egy maximalizált ismétlésnek tekinthetõ, amely + minden lehetõt elnyel - ahogy a fenti példában. Miközben + tehát a \d+ és a \d+? is annyi karaktert készül elnyelni, + hogy a minta maradék része is illeszkedni tudjon, addig a + (?>\d+) csakis a teljes számjegy sorozatra illeszkedik. + + Ez a szerkezet egymásba ágyazható, és természetesen + tartalmazhat tetszõlegesen bonyolult részmintákat is. + + Az egyszeri részminták a hátratekintõ tesztekkel közösen + hatékony szövegvégére illeszkedõ mintát képesek megadni. + Nézzük a következõ mintát + + abcd$ + + egy hosszú, nem illeszkedõ szövegre alkalmazva. Mivel az + illesztés balról jobbra történik, PCRE a tárgyszöveg minden + "a" betûjét végignézi, és megvizsgálja, hogy onnantól a + minta többi része illeszkedik-e. Ha a mintát így adjuk meg: + + ^.*abcd$ + + akkor a kezdõ .* elõször a teljes szövegre illeszkedik, de + mikor a minta maradéka elbukik - hiszen nem következik + semmilyen "a" betû -, az algoritmus visszalép, hogy az + utolsó karakter kivételével mindent elnyeljen, majd az + utolsó két karakter kivételével, stb. Az "a" megkeresése + mégegyszer lefedi az egész szöveget - most jobbról balról -, + ez sem jobb. Ha azonban a mintát az alábbi alakra hozzuk + + ^(?>.*)(?<=abcd) + + az eljárás nem tud visszalépni .* elemre, csak az egész + szövegre tud illeszkedni a minta. A soron következõ + hátratekintõ teszt pedig az utolsó négy karaktert ellenõrzi. + Ha a teszt sikertelen, akkor az illesztés nyomban elbukik. + Hosszú szövegek esetén ez a megközelítés jelentõs - mérhetõ + - különbséget jelent a feldolgozási idõben. + + A korlátlan ismétlésû részmintákat tartalmazó mintákban, + amelyek maguk is korlátlan számban ismétlõdhetnek, az + egyszeri részmintával akadályozható meg egyedül az, hogy + néhány sikertelen illesztés valóban hosszú ideig tartson. A + + (\D+|<\d+>)*[!?] + + minta azokra a szövegekre illeszkedik, amelyek korlátlan + számú nem számjegy karakterek vagy <> közé írt számjegyek + sorozatából és egy !-bõl vagy ?-bõl állnak. Ha illeszkedik, + az gyorsan kiderül. Ám ha az + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + + szövegre próbáljuk illeszteni, akkor sok idõt vesz igénybe, + mire "értesülünk a kudarcról". Ez azért van, mert a szöveget + nagyon sokféleképpen lehet feldarabolni két ismétlés között + és mindet végig kell próbálni. (A példában azért szerepelt + [!?] a minta végén egy egyszerû karakter helyett, mert Perl + és PCRE is rendelkezik egy beépített optimalizálással, amely + lehetõvé teszi a sikertelenség korai jelzését, mert + megjegyzik az utolsó illesztendõ karaktert és korán + jeleznek, ha az nincs benne a tárgyszövegben.) + Ha a mintát a következõképp módosítjuk: + + ((?>\D+)|<\d+>)*[!?] + + akkor a nem számjegyekbõl álló sorozatot nem lehet széttörni + és hamar kiderül, hogy nem az illesztés nem sikerült. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.conditional"> + <title>Feltételes részminták</title> + <literallayout> + Lehetõség van arra, hogy egy teszt (assertion) eredményétõl + vagy egy elõzõ "gyûjtõ" részminta illeszkedésétõl függõen + más-más részmintával folytatódjon az illesztés. A feltételes + részminták két alakja: + + (?(feltétel)igen-minta) + (?(feltétel)igen-minta|nem-minta) + + Ha a feltétel teljesül, az "igen-minta" lesz illesztve, + egyébként a "nem-minta", ha megadtunk ilyet. Ha 2-nél több + választható részmintát adtunk meg, akkor az a kiértkelés + - fordítás során hibát okoz. + + Kétfajta feltételt lehet megadni.Ha a kerek zárójelek között + csak számjegyek szerepelnek, akkor ezt egy hivatkozásként + értelmezve a feltétel abban az esetben teljesül, ha a + hivatkozott "gyûjtõ" részminta elõzõleg már illeszkedett a + szöveg valamely részére. Nézzük a következõ mintát, amelyben + a térközök nem számítanak, csak az olvashatóságot és a + könnyebb tárgyalást szolgálják. + (feltételezzük, hogy a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> be van + kapcsolva): + + ( \( )? [^()]+ (?(1) \) ) + + A minta elsõ része egy nem kötelezõ kerek nyitó zárójelre + illeszkedik, és ha ez a karakter szerepel, akkor az elsõ + begyûjtött - megtalált szövegrész (\1 vagy $1 numerikus + változó) ezt fogja tartlamazni. A minta második része a nem + kerek zárójelekre illeszkedik. A harmadik részben található + a feltételes részminta, ami azt teszteli, hogy az elsõ + részben a nyitózárójel illeszkedett-e vagy sem. Ha igen, + azaz ha a tárgyszöveg nyitó zárójellel kezdõdött, akkor az + "igen-részminta" érvényre jut, és a bezáró kerek zárójel már + kötelezõ lesz, egyébként - mivel nincs megadva "nem-minta" - + semminek nem kell illeszkednie. Magyarán ez a minta az + elhagyható zárójelek közé fogott zárójeleket nem tartalmazó + karaktersorozatra illeszkedik. + + Ha a feltételrészben nem csak számjegyek vannak, akkor annak + kötelezõen egy tesztnek (assertion) kell lennie. Ez lehet + akár elõre- vagy hátratekintõ, állító vagy tagadó felétel + is. Tekintsünk most egy, két választható mintából álló + példát, ahol a térközök szintén nem számítanak: + + (?(?=[^a-z]*[a-z]) + \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) + + (Elsõ sorban a tesztfeltétel, + a másodikban a két választható minta.) + A feltétel olyan elõretekintõ teszt, ami azt vizsgálja, hogy + egy betû elõtt elhagyható nem-betû karaktersorozat áll, azaz + legalább egy betû jelenlétét vizsgálja. Ha ez a betû jelen + van, akkor a tárgyszöveg az elsõ mintára illeszkedik, míg + egyébként a másodikra. Ez a minta vagy a "dd-aaa-dd" vagy a + "dd-dd-dd" alakú szövegekre illeszkedik, ahol "aaa" három + betût, "dd" pedig két számjegyet jelez. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.comments"> + <title>Megjegyzések</title> + <literallayout> + A (?# karartersorozat megjegyzések kezdetét jelzi a mintán + belül, amely a következõ bezáró kerek zárójelig tart. A + megjegyzéseket nem lehet egymásba ágyazni, és a bennük + elõforduló karakterek nem játszanak semmilyen szerepet a + mintaillesztés során. + + Ha a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> módosító be van kapcsolva, akkor + karakterosztályon kívüli visszaperjel nélküli # karakter + "egy soros" megjegyzést vezet be, amely a legközelebbi újsor + karakterig tart. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.recursive"> + <title>Rekurzív (önhivatkozó) minták</title> + <literallayout> + + Nézzük az egymásba ágyazható zárójeles kifejezésekre + illeszkedõ minta problémáját. Rekurzió használata nélkül a + legtöbb, amit tehetünk, hogy rögzített számú egymásba + ágyazhatóságot kezelõ mintát használunk. Nem megoldható a + tetszõleges mélységû egymásbaágyazhatóság. + Perl 5.6 kísérleti jelleggel biztosítja a lehetõséget a + reguláris kifejezések rekurzív bejárására (több egyéb + mellett). A különleges (?R) elem jelenti a meghatározott + önhivatkozási pontot. + A PCRE minta, amely megoldja a zárójelezett szövegek + problémáját (feltéve, hogy a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosító be van kapcsolva, tehát a térközök nem részei a + mintának) a következõ: + + \( ( (?>[^()]+) | (?R) )* \) + + Elõször egy nyitó zárójelre illeszkedik, ezután tetszõleges + hosszúságú karakterresorozatra, amely vagy nem tartalmaz + zárójeleket, vagy rekurzívan az egész mintára illeszkedik (a + zárójelezett szövegekre). Végül a bezáró zárójel következik. + + Ez a sajátságos minta korlátlan számú, egymásba ágyazott + ismétlést takar, ezért a zárójel nélküli szövegrészre + illesztésnél az egyszeri részminta használata nagyon fontos, + kiváltképp ha nem illeszkedõ tárgyszövegre alkalmazzuk. Ha például a + + (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() + + szövegre próbáljuk a mintát, akkor nagyon hamar megkapjuk az + eredményt. Ha nem használnánk az egyszeri részmintát, akkor + az illesztés nagyon sokáig tartana, mert rengeteg különbözõ + módon lehet a tárgyszöveget felszeletelni a * és + kvantorok + (sokszorozók) között, és minden lehetõséget ki kell + próbálni, mire az illesztést végleg sikertelennek lehet + minõsíteni. + + A "gyûjtõ" részminták által begyûjtött szövegek a rekurzió + során a legutoljára illesztett szövegrészek.A fenti mintát a + + (ab(cd)ef) + + szövegre alkalmazva a "begyûjtött" / megtalált rész az "ef" + lesz, amely a felsõ szinten az utolsó felvett érték. Ha + további zárójeleket helyezünk el a mintában ekképpen: + + \( ( ( (?>[^()]+) | (?R) )* ) \) + ^ ^ + ^ ^ + , akkor a "ab(cd)ef" szöveg lesz legkülsõ "gyûjtõ" zárójel + értéke. Ha 15-nél több "gyûjtõ" zárójel van a mintában, + akkor PCRE tartalék memóriát foglal le, hogy az adatokat itt + tárolja a rekurzió alatt (pcre_malloc-kal foglalja le, és a pcre_free-vel szabadítja fel azután.) Ha nem lehet több + memóriához hozzájutni, akkor csak az elsõ 15 "gyûjtõ" + zárójelnek menti el az adatait, minthogy lehetetlen "nincs + elég memória" hibaüzenetet kiadni a rekurzión belül. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.performances"> + <title>Teljesítmény</title> + <literallayout> + Bizonyos minták sokkal hatékonyabbak, mint mások, például + [aáeéiíoóöõuúüû] karakterosztály hatékonyabb, mint ugyanezt + választható mintákkal (a|á|e|é|i|í|o|ó|ö|õ|u|ú|ü|û) megoldani. Általában a legegyszerûbb szerkezet, amely a + kívánt viselkedést biztosítja rendszerint a leghatékonyabb. + Jeffrey Friedl könyve rengeteg példát tartalmaz, hogyan kell + reguláris kifejezéseket optimalizálni a hatékony végrehajtáshoz. + + Ha a minta .* -gal kezdõdik, és a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> módosító + be van kapcsolva, akkor PCRE a mintát hallagtólagosan + "rögzíti", mivel az csak a tárgyszöveg elejére illeszkedhet. + Ha ez a módosító nincs beállítva, akkor nem élhet ilyen + optimalizálással, mivel a . metakarakter nem illeszkedik az + újsorkarakterre, ezért elõfordulhat, hogy a mintát minden + egyes újsortól illeszteni kell, nem csak a szöveg elejére. A + + (.*) második + + minta úgy illeszkedik az "elsõ\nés második" szövegre (ahol a + \n az újsort testesíti meg), hogy az elsõ "begyûjtött" + szövegrész az "és" lesz. Ehhez a PCRE-nek minden újsor után + újból meg kell próbálni az illesztést. + + Ha az ilyesfajta mintákat olyan szövegekre alkalmazod, + amelyekben nincsenek sortörések (újsorkarakterek), akkor a + legjobb teljesítmény a + <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + módosító beállításával + vagy a "rögzítés" egyértelmû megadásával lehetséges: ^.* . Ez megkíméli PCRE-t, hogy végignézze a tárgyszöveget + újsorkaraktert keresve, ahonnan az illesztést újrakezdheti. + + Vigyázz azokkal a mintákkal, amelyek egymásba ágyazott + határozatlan számú ismétlést tartalmaznak. Ezek a minták sok + idõt vesznek el, ha nem illeszkedõ szövegre kell alkalmazni õket. Nézzük a + + (a+)* + + mintát! Ez 33 féleképpen illeszkedik az "aaaa" szövegre, és + ez a szám rohamosan növekszik, ahogy a szöveg egyre hosszabb + lesz. (A * illeszkedhet 0-szor, 1-szer, 2-szer, 3-szor vagy + 4-szer, és - 0-t kivéve - minden esetben a + is különbözõ + számúszor.) Amikor a minta fennmaradó része ilyen és az + illesztés egésze sikertelenül érne vége, PCRE elvben + végigpróbálja az összes lehetõséget, ami rendkívül sok idõt + vehet igénybe. + + Néhány egyszerûbb minta esetén optimalizálás történik, mint + például + + (a+)*b + + , ahol literális (önmagára illeszkedõ) karakter követi a + vizsgált részt. Mielõtt a hagyományos illesztési eljárás + elkezdõdik, PCRE megvizsgálja, hogy elõfordul-e késõbb a + mintában "b", és ha nem, akkor azonnal sikertelennek + minõsíti az illesztést. Amikor azonban nem literális követi + a mintarészt, akkor ez az optimalizáció nem használható. + A különbséget megvizsgálhatod a + + (a+)*\d + + minta viselkedésével összehasonlítva. Az elõbbi szinte + azonnal véget ér, ha csupa "a"-ból álló sorozatra illesztik, + míg az utóbbi kipróbálása jelentõs idõt vesz el 20 + karakternél hosszabb tárgyszövegekre. + </literallayout> + </refsect2> + </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 +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 +--> \ No newline at end of file
Index: phpdoc/hu/functions/funchand.xml diff -u /dev/null phpdoc/hu/functions/funchand.xml:1.4 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/funchand.xml Fri Dec 7 10:52:49 2001 @@ -0,0 +1,628 @@ +<?xml encoding="iso-8859-2" version="1.0"?> +<!-- EN-Revision: 1.18 Maintainer: pgerzson Status: ready --> + <reference id="ref.funchand"> + <title>Függvénykezelõ függvények</title> + <titleabbrev>Függvénykezelés</titleabbrev> + + <partintro> + <para> + E függvények mindegyike különféle, a PHP függvényekhez szorosan + kapcsolodó mûveletekben segédkezik. + </para> + </partintro> + + <refentry id="function.call-user-func-array"> + <refnamediv> + <refname>call_user_func_array</refname> + <refpurpose> + Felhasználói függvényt hív meg a paraméterek egy tömbjével + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed + <function>call_user_func_array</function> + </funcdef> + <paramdef>string + <parameter>function_name</parameter> + </paramdef> + <paramdef>array + <parameter><optional>paramarr</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>function_name</parameter>-ban megadott nevû felhasználói + függvényt hívja meg <parameter>paramarr</parameter>-ben megadott + paraméterekkel. + Például: + <informalexample> + <programlisting role="php"> +function debug($var, $val) + echo "***Bogarásszunk\nVÁLTOZÓ: $var\nÉRTÉKE:"; + if (is_array($val) || is_object($val) || is_resource($val)) + print_r($val); + else + echo "\n$val\n"; + echo "***\n"; +} + +$c = mysql_connect(); +$host = $HTTP_SERVER_VARS["SERVER_NAME"]; + +call_user_func_array ('debug', array("host", $host)); +call_user_func_array ('debug', array("c", $c)); +call_user_func_array ('debug', array("HTTP_POST_VARS", $HTTP_POST_VARS)); + </programlisting> + </informalexample> + </para> + <para> + Lásd még: + <function>call_user_func</function>, + <function>call_user_method</function> és + <function>call_user_method_array</function>! + </para> + <note> + <para> + Ez a függvény a PHP 4.0.4pl1 kiadása után került a CVS-be. + </para> + </note> + </refsect1> + </refentry> + + <refentry id="function.call-user-func"> + <refnamediv> + <refname>call_user_func</refname> + <refpurpose> + Felhasználói függvényt hív meg. + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed + <function>call_user_func</function> + </funcdef> + <paramdef>string + <parameter>function_name</parameter> + </paramdef> + <paramdef>mixed + <parameter><optional>parameter</optional></parameter> + </paramdef> + <paramdef>mixed + <parameter><optional>...</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>function_name</parameter>-ban megadott nevû felhasználói + függvényt hívja meg. Az ezután álló <parameter>parameter</parameter> + paraméterek a megadott sorrendben lesznek átadva a meghívott függvénynek. + Nézzük a kövekezõ példát: + <informalexample> + <programlisting role="php"> +function brobely ($type) { + print " Szóval $type akar, semmi gond."; +} +call_user_func ('barber', "gomba frizurát"); +call_user_func ('barber', "nyírást"); + </programlisting> + </informalexample> + </para> + <para> + Lásd még: + <function>call_user_func_array</function>, + <function>call_user_method</function> és + <function>call_user_method_array</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.create-function"> + <refnamediv> + <refname>create_function</refname> + <refpurpose>Név nélküli (lambda típusú) függvényt definiál</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>create_function</function></funcdef> + <paramdef>string <parameter>args</parameter></paramdef> + <paramdef>string <parameter>code</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az átadott paraméterek alapján egy anonim - név nélküli függvényt hoz létre. + Az <parameter>args</parameter> paramétert általában egyszeres idézõjelek + közt szokás átadni, és ez ajánlott a <parameter>code</parameter>-ra is. + Ennek az az oka, hogy így az egyszeres idézõjelek közé fogott sztringekre + nem aktiválódik a változó-behelyettesítés, máskülönben macskakörmök + használata esetén a változó neveket visszaperjelezned kellene, mint például: + <literal>\$avar</literal>. + </para> + <para> + Ezzel a függvénnyel - például futási idõben nyert információk alapján - + definiálhatsz új függvényeket: + <example> + <title> + A <function>create_function</function> segítségével definiált függvények + </title> + <programlisting role="php"> +$ujfgv = create_function('$a,$b','return "ln($a) + ln($b) = ".log($a * $b);'); +echo "Új névtelen függvényünk: $ujfgv\n"; // azért valami neve csak van :) +echo $ujfgv(2,M_E)."\n"; +// eredménye +// Új névtelen függvényünk: lambda_1 +// ln(2) + ln(2.718281828459) = 1.6931471805599 + </programlisting> + </example> + Vagy egy általános kezelõfüggvény megléte esetén mûveletek sorozata alkalmazható + egy adott paraméterlistára, pl: + <example> + <title> + Általános feldolgozó függvény létrehozása + <function>create_function</function>-nel. + </title> + <programlisting role="php"> +function feldolgoz($valtozo1, $valtozo2, $fvtomb) { + for ($f=0; $f < count($fvtomb); $f++) + echo $fvtomb[$f]($valtozo1,$valtozo2)."\n"; +} + +// egy csomó matematikai függvény létrehozása +$f1 = 'if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'; +$f2 = "return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"; +$f3 = 'if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b;} else {return false;}'; +$fv_tomb = array( + create_function('$x,$y', 'return "ezt nem tudom mi: ".(sin($x) + $x*cos($y));'), + create_function('$x,$y', 'return "az átfogó: ".sqrt($x*$x + $y*$y);'), + create_function('$a,$b', $f1), + create_function('$a,$b', $f2), + create_function('$a,$b', $f3) + ); + +echo "\nAz elso tomb anonim fuggvenyekkel\n"; +echo "parameterek: 2.3445, M_PI\n"; +feldolgoz(2.3445, M_PI, $fv_tomb); + +// most egy csomó sztringkezelõ függvény létrehozása +$fv_tomb2 = array( + create_function('$b,$a','if (strncmp($a,$b,3) == 0) return "** \"$a\" '. + 'es \"$b\"\n** nekem azonosnak tunik! (az elso 3 karakter utan)";'), + create_function('$a,$b','; return "CRCs: ".crc32($a)." , ".crc32(b);'), + create_function('$a,$b','; return "similar(a,b) = ".similar_text($a,$b,&$p)."($p%)";') + ); +echo "\nA masodik tomb anonim fuggvenyekkel\n"; +feldolgoz("Twas brilling and the slithy toves", "Twas the night", $fv_tomb2); + </programlisting> + </example> + and when you run the code above, the output will be: + <informalexample> + <programlisting> +Az elso tomb anonim fuggvenyekkel +parameterek: 2.3445, M_PI +ezt nem tudom mi: -1.6291725057799 +az átfogó: 3.9199852871011 +b*a^2 = 4.8103313314525 +min(b^2+a, a^2,b) = 8.6382729035898 +ln(a/b) = 0.27122299212594 + +A masodik tomb anonim fuggvenyekkel +** "Twas the night" and "Twas brilling and the slithy toves" +** nekem azonosnak tunik! (az elso 3 karakter utan) +CRCs: -725381282 , 1908338681 +similar(a,b) = 11(45.833333333333%) + </programlisting> + </informalexample> + Valószínûleg az anonim függvények legáltalánosabb felhasználási módja az + ún. 'callback' függvények létrehozása, pl. az <function>array_walk</function> vagy + az <function>usort</function> számára. + <example> + <title>Anonim függvények használata 'callback' függvényként</title> + <programlisting role="php"> +$nevelok = array("a ","egy ","az ","ez "); +array_walk($nevelok, create_function('&$v,$k','$v = $v."mango";')); +print_r($av); // PHP 3-soknak var_dump() +// kiirja, hogy : +// Array +// ( +// [0] => a mango +// [1] => egy mango +// [2] => az mango +// [3] => ez mango +// ) + +// szrtinggel teli tömb a rövidebbtõl a hosszabb felé rendezve +$sv = array("rovid","hosszabb","egy nagy string","ez valami sztring dolog"); +print_r($sv); +// kiírja, hogy: +// Array +// ( +// [0] => rovid +// [1] => hosszabb +// [2] => egy nagy sztring +// [3] => ez valami sztring dolog +// ) + +// hosszúság szerinti csökkenõ sorrendben rendezve: +usort($sv, create_function('$a,$b','return strlen($b) - strlen($a);')); +print_r($sv); +// kiírja, hogy: +// Array +// ( +// [0] => ez valami sztring dolog +// [1] => egy nagy sztring +// [2] => hosszabb +// [3] => rovid +// ) + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.func-get-arg"> + <refnamediv> + <refname>func_get_arg</refname> + <refpurpose>Visszaadja a paraméter lista egy elemét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>func_get_arg</function></funcdef> + <paramdef>int <parameter>arg_num</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Visszadja a függvénynek átadott paraméterlista <parameter>arg_num</parameter>. + helyén álló paramétert. A paraméterek számozása 0-tól kezdõdik. + A <function>func_get_arg</function> "nem fatális" hibát (warning) jelez, + ha függvényen kívül hívod meg. + </simpara> + <simpara> + Ha az <parameter>arg_num</parameter> a pillanatnyilag átadott paraméterek + számánál nagyobb, akkor egy "nem fatális" hiba (warning) generálódik és a + <function>func_get_arg</function> &false;-szal tér vissza. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function ize() { + $parameterek_szama = func_num_args(); + echo "argumentumok száma: {$parameterek_szama}<br>\n"; + if ($parameterek_szama >= 2) { + echo "A második paraméter: " . func_get_arg (1) . "<br>\n"; + } +} + +ize (1, 2, 3); +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_get_arg</function> a <function>func_num_args</function> + és a <function>func_get_args</function> függvényekkel együtt olyan + függvények írását segítik elõ, amelyek különbözõ hosszúságú + paraméterlistákat képesek kezelni. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.func-get-args"> + <refnamediv> + <refname>func_get_args</refname> + <refpurpose> + Visszatér a függvénynek átadott paramétereket tartalmazó tömbbel + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>func_get_args</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaad egy tömböt az aktuális függvénynek átadott paraméterekkel. + A <function>func_get_args</function> "nem fatális" hibát (warning) jelez, + ha függvénydefiníción kívül hívod meg. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function foo() { + $pm_szama = func_num_args(); + echo "A parameterek szama: {$pm_szama}<br>\n"; + if ($pm_szama >= 2) { + echo "A masodik parameter: " . func_get_arg (1) . "<br>\n"; + } + $pm_lista = func_get_args(); + for ($i = 0; $i < $pm_szama; $i++) { + echo "$i. parameter : " . $pm_lista[$i] . "<br>\n"; + } +} + +foo (1, 2, 3); +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_get_args</function>-t a <function>func_get_arg</function> és + <function>func_num_args</function> függvényekkel együtt használva a felhasználói + függvények is képesek kezelni a változó hosszúságú paraméterlistákat. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.func-num-args"> + <refnamediv> + <refname>func_num_args</refname> + <refpurpose> + Visszaadja a függvénynek átadott paraméterek számát + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>func_num_args</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaadja az aktuális függvénynek átadott paraméterek számát. + A <function>func_num_args</function> "nem fatális" hibát (warning) jelez, + ha függvénydefiníción kívül hívod meg. + </simpara> + <para> + <informalexample> + <programlisting role="php"> +<?php +function ize() { + $pm_szama = func_num_args(); + echo "A parameterek szama: {$pm_szama}\n"; +} + +foo (1, 2, 3); // azt írja ki: 'A parameterek szama: 3' +?> + </programlisting> + </informalexample> + </para> + <simpara> + A <function>func_num_args</function>-t a <function>func_get_arg</function> és + <function>func_get_args</function> függvényekkel együtt használva a felhasználói + függvények is képesek kezelni a változó hosszúságú paraméterlistákat. + </simpara> + <note> + <simpara> + Ez a függvény PHP 4-tõl használható. + </simpara> + </note> + </refsect1> + </refentry> + + <refentry id="function.function-exists"> + <refnamediv> + <refname>function_exists</refname> + <refpurpose> + &true;-val tér vissza, ha az adott nevû függvény definiálva van + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>bool <function>function_exists</function></funcdef> + <paramdef>string <parameter>function_name</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A definiált függvények listájában megkeresi a <parameter>function_name</parameter> nevût, + és &true;-val tér vissza, ha az adott nevû függvényt megtalálta, egyébként &false;-szal. + <informalexample> + <programlisting role="php"> +if (function_exists('imap_open')) { + echo "IMAP függvények használhatók.<br>\n"; +} else { + echo "IMAP függvények _nem_ használhatók.<br>\n"; +} + </programlisting> + </informalexample> + Vigyázz, mert egy függvény neve létezhet, még akkor is ha a függvény maga nem használható + valamilyen konfigurációs vagy fordítási beálltás következtében. + </para> + <para> + See also <function>method_exists</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.get-defined-functions"> + <refnamediv> + <refname>get_defined_functions</refname> + <refpurpose> + visszatér az összes definiált függvény nevével + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>get_defined_functions</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény egy többdimenziós tömböt ad vissza, amelyben mind a beépített + mind a felhasználó által definiált függvények nevei szereplnek. A beépített + függvények nevei <varname>$arr["internal"]</varname>-n keresztül érhetõk el, + amelyeket a felhasználó definiált pedig a <varname>$arr["user"]</varname>-n keresztül. + (lásd a lenti példát) + <informalexample> + <programlisting role="php"> +function az_en_sorom($id, $adat) { + return "<tr><th>$id</th><td>$adat</td></tr>\n"; +} + +$arr = get_defined_functions(); + +print_r($arr); + </programlisting> + </informalexample> + </para> + <para> + valami hasonlót fog kírni: + <informalexample> + <programlisting> +Array +( + [internal] => Array + ( + [0] => zend_version + [1] => func_num_args + [2] => func_get_arg + [3] => func_get_args + [4] => strlen + [5] => strcmp + [6] => strncmp + ... + [750] => bcscale + [751] => bccomp + ) + + [user] => Array + ( + [0] => az_en_sorom + ) + +) + </programlisting> + </informalexample> + </para> + <para> + See also <function>get_defined_vars</function>. + </para> + </refsect1> + </refentry> + + <refentry id="function.register-shutdown-function"> + <refnamediv> + <refname>register_shutdown_function</refname> + <refpurpose> + Regiszrálja a függvényt a szkript befejezésekor történõ végrehajtásra + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int + <function>register_shutdown_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A <parameter>func</parameter> nevû függvényt regisztrálja, + hogy az majd a szkript feldolgozása után lefusson.</simpara> + <para> + Gyakori hiba: + </para> + <simpara> + Mivel ebben a függvényben semmilyen adatot nem küldhetsz már a kliens felé, + ezért hibakeresés gyanánt nem használhatsz olyan utasításokat, + mint a print vagy az echo. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.register-tick-function"> + <refnamediv> + <refname>register_tick_function</refname> + <refpurpose> + Regisztrálja a függvényt a tick eseményhez + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void + <function>register_tick_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + <paramdef>mixed <parameter><optional>arg</optional></parameter>...</paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Regisztrálja a <parameter>func</parameter> nevû függvényt, hogy az meghívásra kerüljön + minden egyes <link linkend="control-structures.declare">tick</link> bekövetkeztekor. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.unregister-tick-function"> + <refnamediv> + <refname>unregister_tick_function</refname> + <refpurpose> + Megszünteti a függvény futtatását mindenegyes tick bekövetkeztekor + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void + <function>unregister_tick_function</function> + </funcdef> + <paramdef>string <parameter>func</parameter></paramdef> + <paramdef>mixed <parameter><optional>arg</optional></parameter>...</paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A <parameter>func</parameter> nevû függvényt kiiktatja, hogy az ne fusson le, amikor egy <link + linkend="control-structures.declare">tick</link> esemény bekövetkezik.</simpara> + </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 +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 +--> Index: phpdoc/hu/functions/math.xml diff -u /dev/null phpdoc/hu/functions/math.xml:1.5 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/math.xml Fri Dec 7 10:52:49 2001 @@ -0,0 +1,1236 @@ +<?xml version="1.0" encoding="iso-8859-2" ?> +<!-- EN-Revision: 1.55 Maintainer: pgerzson Status: ready --> + <reference id="ref.math"> + <title>Matematikai függvények</title> + <titleabbrev>Matematika</titleabbrev> + + <partintro> + <sect1 id="math.intro"> + <title>Elõszó</title> + <para> + Ezek a matematikai függvények csak a gépeden ábrázolható + <type>integer</type> és <type>float</type> típusok értéktartományába + esõ értkeket képes kezelni (ez jelenleg azonos a C beli long és double típusokéval) + Ha nagyobb számokat kell kezelni, akkor a nézd meg a <link + linkend="ref.bc">tetszõleges pontosságú matematikai függvényeket.</link>. + </para> + <sect2 id="math.constants"> + <title>Matematikai állandók</title> + <para> + Ez a matematikai kiterjesztés a következõ értékeket hozza létre a PHP-ban: + <table> + <title>Matematikai állandók</title> + <tgroup cols="3"> + <thead> + <row> + <entry>Állandó</entry> + <entry>Érték</entry> + <entry>Leírás</entry> + </row> + </thead> + <tbody> + <row> + <entry>M_PI</entry> + <entry>3.14159265358979323846</entry> + <entry>Pi</entry> + </row> + <row> + <entry>M_E</entry> + <entry>2.7182818284590452354</entry> + <entry>e</entry> + </row> + <row> + <entry>M_LOG2E</entry> + <entry>1.4426950408889634074</entry> + <entry>log_2 e</entry> + </row> + <row> + <entry>M_LOG10E</entry> + <entry>0.43429448190325182765</entry> + <entry>log_10 e</entry> + </row> + <row> + <entry>M_LN2</entry> + <entry>0.69314718055994530942</entry> + <entry>log_e 2</entry> + </row> + <row> + <entry>M_LN10</entry> + <entry>2.30258509299404568402</entry> + <entry>log_e 10</entry> + </row> + <row> + <entry>M_PI_2</entry> + <entry>1.57079632679489661923</entry> + <entry>pi/2</entry> + </row> + <row> + <entry>M_PI_4</entry> + <entry>0.78539816339744830962</entry> + <entry>pi/4</entry> + </row> + <row> + <entry>M_1_PI</entry> + <entry>0.31830988618379067154</entry> + <entry>1/pi</entry> + </row> + <row> + <entry>M_2_PI</entry> + <entry>0.63661977236758134308</entry> + <entry>2/pi</entry> + </row> + <row> + <entry>M_SQRTPI</entry> + <entry>1.77245385090551602729</entry> + <entry>sqrt(pi) [4.0.2]</entry> + </row> + <row> + <entry>M_2_SQRTPI</entry> + <entry>1.12837916709551257390</entry> + <entry>2/sqrt(pi)</entry> + </row> + <row> + <entry>M_SQRT2</entry> + <entry>1.41421356237309504880</entry> + <entry>sqrt(2)</entry> + </row> + <row> + <entry>M_SQRT3</entry> + <entry>1.73205080756887729352</entry> + <entry>sqrt(3) [4.0.2]</entry> + </row> + <row> + <entry>M_SQRT1_2</entry> + <entry>0.70710678118654752440</entry> + <entry>1/sqrt(2)</entry> + </row> + <row> + <entry>M_LNPI</entry> + <entry>1.14472988584940017414</entry> + <entry>log_e(pi) [4.0.2]</entry> + </row> + <row> + <entry>M_EULER</entry> + <entry>0.57721566490153286061</entry> + <entry>Euler constant [4.0.2]</entry> + </row> + </tbody> + </tgroup> + </table> + PHP 4RC1 verziójáig csak az M_PI használható. + Minden más állandó PHP 4.0-tól kezdve elérhetõ, kivéve amelyiknél a [4.0.2] címke olvasható: + ezek csak PHP 4.0.2-tól kezdve. + </para> + </sect2> + </sect1> + </partintro> + + <refentry id="function.abs"> + <refnamediv> + <refname>abs</refname> + <refpurpose>abszolút érték</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>abs</function></funcdef> + <paramdef>mixed <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A szám abszolút értékével tér vissza. Ha paraméterben átadott szám <type>float</type> típusú, + akkor a visszaadott érték is <type>float</type> típusú lesz, egyébként <type>integer</type>. + (mivel egy <type>float</type>-nak általában nagyobb az értéke, mint egy <type>integer</type>-nek). + </para> + </refsect1> + </refentry> + + <refentry id="function.acos"> + <refnamediv> + <refname>acos</refname> + <refpurpose>arkusz koszinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>acos</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ay <parameter>arg</parameter> arkusz koszinuszát adja vissza radiánban. + </para> + <para> + Lásd még: <function>asin</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.asin"> + <refnamediv> + <refname>asin</refname> + <refpurpose>arkusz szinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>asin</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> arkusz szinuszát adja vissza radiánban. + </para> + <para> + Lásd még: <function>acos</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.atan"> + <refnamediv> + <refname>atan</refname> + <refpurpose>arkusz tangens</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>atan</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>arg</parameter> arkusz tangensét adja vissza radiánban. + </para> + <para> + Lásd még: <function>asin</function> és <function>acos</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.atan2"> + <refnamediv> + <refname>atan2</refname> + <refpurpose>két változó arkusz tangense</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>atan2</function></funcdef> + <paramdef>float <parameter>y</parameter></paramdef> + <paramdef>float <parameter>x</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ez a függvény az <parameter>x</parameter> és <parameter>y</parameter> által meghatározott érték + arkusz tangensét adja vissza radiánban. Ez hasonló az <parameter>y</parameter> / <parameter>x</parameter> arkusz tangenséhez, + attól eltekintve hogy a paraméterek elõjele meghatározza, hogy az eredmény melyik körnegyedbe esik. + </simpara> + <simpara> + A függvény eredményét radiánban adja vissza, ami -PI és +PI közé esik (beleértve a határokat is). + </simpara> + <para> + Lásd még: <function>acos</function> és <function>atan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.base-convert"> + <refnamediv> + <refname>base_convert</refname> + <refpurpose>tetszõleges számrendszerbe vált át egy számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>base_convert</function></funcdef> + <paramdef>string <parameter>number</parameter></paramdef> + <paramdef>int <parameter>frombase</parameter></paramdef> + <paramdef>int <parameter>tobase</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter>-ben átadott számot váltja át a <parameter>tobase</parameter>-ben + megadott alapszámú számrendszerbe, és ezzel tér vissza. + A <parameter>number</parameter> alapszáma a <parameter>frombase</parameter>-ben adható meg. + Mind a <parameter>frombase</parameter> és <parameter>tobase</parameter> paraméternek 2 és 36 közé kell esnie. + A 10-nél nagyobb értékû számjegyeket betûkkel ábrázoljuk, ahol az "a" 10-et jelent, a "b" 11-et és a "z" 35-öt. + <example> + <title><function>base_convert</function></title> + <programlisting role="php"> +$binaris = base_convert ($hexadecimalis, 16, 2); +</programlisting> + </example> + </para> + </refsect1> + </refentry> + + + <refentry id="function.bindec"> + <refnamediv> + <refname>bindec</refname> + <refpurpose>binárisból tizes számrendszerbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>bindec</function></funcdef> + <paramdef>string <parameter>binary_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>binary_string</parameter> kettes számrendszerbeli (bináris) szám + tizes számrendszerbeli (decimális) megfelelõjét adja vissza. + </para> + <para> + A <function>bindec</function> függvény <type>integer</type> típusúvá konvertálja át a + bináris számot. Így a legnagyobb konvertálható szám a 31 db 1 bitbõll álló szám vagyis 2147483647 (10-es számrendszerben). + </para> + <para> + Lásd még: <function>decbin</function>! + function. + </para> + </refsect1> + </refentry> + + <refentry id="function.ceil"> + <refnamediv> + <refname>ceil</refname> + <refpurpose>törtrésszel bíró számot felfelé kerekíti</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>ceil</function></funcdef> + <paramdef>float <parameter>value</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha szükséges, akkor a következõ legnagyobb egész számmal tér vissza a <parameter>value</parameter>-t felfelé kerekítve. + A <function>ceil</function> által visszadott érték <type>float</type> típusú, mivel a <type>float</type> értékészlete + általában nagyobb, mint <type>int</type>-é. + </simpara> + <simpara> + Lásd még: <function>floor</function> és <function>round</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.cos"> + <refnamediv> + <refname>cos</refname> + <refpurpose>koszinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>cos</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiában megadott <parameter>arg</parameter> koszinuszát adja vissza. + </para> + <para> + Lásd még: <function>sin</function> és <function>tan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.decbin"> + <refnamediv> + <refname>decbin</refname> + <refpurpose>tízes számrendszerbõl kettesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>decbin</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> kettes számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami 31 db 1-esbõl álló sztringet eredményez. + </para> + <para> + Lásd még: <function>bindec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.dechex"> + <refnamediv> + <refname>dechex</refname> + <refpurpose>tízes számrendszerbõl tizenhatosba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>dechex</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> tizenhatos számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami "7fffffff"-et ad eredményül. + </para> + <para> + Lásd még: <function>hexdec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.decoct"> + <refnamediv> + <refname>decoct</refname> + <refpurpose>tízes számrendszerbõl nyolcasba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>decoct</function></funcdef> + <paramdef>int <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>number</parameter> nyolcas számrendszerbeli ábrázolását sztringként adja vissza. + A legnagyobb átváltható szám 2147483647 (tízes számrendszerben), ami "17777777777"-et ad eredményül. + </para> + <para> + Lásd még: <function>octdec</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.deg2rad"> + <refnamediv> + <refname>deg2rad</refname> + <refpurpose>fokból radiánba vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>deg2rad</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény a <parameter>number</parameter> paraméterben megadott fokokat radiánba váltja át. + </para> + <para> + Lásd még: <function>rad2deg</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.exp"> + <refnamediv> + <refname>exp</refname> + <refpurpose>e a(z) ... -re emelve </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>exp</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Visszaadja, hogy mennyivel egyenlõ az <literal>e</literal> az <parameter>arg</parameter>-ban megadott hatványon. + </para> + <para> + Lásd még: <function>pow</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.floor"> + <refnamediv> + <refname>floor</refname> + <refpurpose>lefelé kerekíti a törtrésszel bíró számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>floor</function></funcdef> + <paramdef>float <parameter>value</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha szükséges, akkor a megelõzõ legkisebb egész számmal tér vissza a <parameter>value</parameter>-t lefelé kerekítve. + A <function>floor</function> által visszadott érték <type>float</type> típusú, mivel a <type>float</type> értékészlete + általában nagyobb, mint <type>int</type>-é. + </simpara> + <simpara> + Lásd még: <function>ceil</function> és <function>round</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.getrandmax"> + <refnamediv> + <refname>getrandmax</refname> + <refpurpose>a legnagyobb lehetséges véletlen számot adja vissza</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>getrandmax</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + A legnagyobb lehetséges véletlen számot adja vissza, amit a <function>rand</function> meghívásakor visszaadhat. + </simpara> + <simpara> + Lásd még: <function>rand</function>, <function>srand</function>, + <function>mt_rand</function>, <function>mt_srand</function>, és + <function>mt_getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.hexdec"> + <refnamediv> + <refname>hexdec</refname> + <refpurpose>tizenhatos számrendszerbõl tízesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>hexdec</function></funcdef> + <paramdef>string <parameter>hex_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A tizenhatos számrendszerbeli <parameter>number</parameter> tízes számrendszerbeli megfelelõjével tér vissza. + A legnagyobb átváltható szám a 7fffffff, azaz 2147483647 (tízes számrendszerben). + </para> + <para> + A <function>hexdec</function> a <parameter>hex_string</parameter> nem hexadecimális karaktereit + <literal>0</literal>-ra cseréli, és így minden baloldali nullát figyelmen kívül hagy, de a + jobboldaliak beszámítanak az eredménybe. + <example> + <title><function>hexdec</function> példa</title> + <programlisting role="php"> +var_dump(hexdec("hee")); +var_dump(hexdec("ee")); +// mindketto: int(238) + +var_dump(hexdec("az")); +var_dump(hexdec("a0")); +// mindketto: int(160) + </programlisting> + </example> + </para> + <para> + Lásd még: <function>dechex</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.lcg-value"> + <refnamediv> + <refname>lcg_value</refname> + <refpurpose>Kombinált lineáris kongruencia generátor</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>lcg_value</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <para> + <function>lcg_value</function> returns a pseudo random number in + the range of (0, 1). The function combines two CGs with periods + of 2^31 - 85 and 2^31 - 249. The period of this function is equal + to the product of both primes. + + <!-- + A függvény két, 2^31 - 85 és 2^31 - 249 periódusú kongruenst kombinál, és a periódusa + ennek a két prímnek a szorzatával egyenlõ. + --> + </para> + </refsect1> + </refentry> + + <refentry id="function.log"> + <refnamediv> + <refname>log</refname> + <refpurpose>természetes alapú logaritmus</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>log</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> természetes (e) alapú logaritmusát adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.log10"> + <refnamediv> + <refname>log10</refname> + <refpurpose>tízes alapú logaritmus</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>log10</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> tízes alapú logaritmusát adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.max"> + <refnamediv> + <refname>max</refname> + <refpurpose>megkeresi a legnagyobb értéket</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>max</function></funcdef> + <paramdef>mixed <parameter>arg1</parameter></paramdef> + <paramdef>mixed <parameter>arg2</parameter></paramdef> + <paramdef>mixed <parameter>argn</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>max</function> a paraméterként átadott számként értelmezett értékek legnagyobbjával tér vissza. + </para> + <para> + Ha az elsõ paraméter tömb típusú, akkor a tömbbeli legnagyobb értéket adja vissza. + Ha az elsõ paraméter integer, float vagy string típusú, akkor legalább két paraméterrel + kell meghívni a függvényt, és az a legnagyobb értékû számmal tér vissza. + Korlátlan számú paraméterrel hívható meg ez a függvény. + </para> + <para> + Ha legalább egy összehasonlítandó érték float típusú, akkor mindegyik float-ként lesz kezelve és a + visszatérési érték is float lesz. Ha egyik sem float, akkor mindegyik integer-ként lesz kezelve, és + a visszatérési érték is integer lesz. + </para> + </refsect1> + </refentry> + + <refentry id="function.min"> + <refnamediv> + <refname>min</refname> + <refpurpose>megkeresi a legkisebb értéket</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>number <function>min</function></funcdef> + <paramdef>number <parameter>arg1</parameter></paramdef> + <paramdef>number <parameter>arg2</parameter></paramdef> + <paramdef><parameter><optional>...</optional></parameter></paramdef> + </funcprototype> + <funcprototype> + <funcdef>number <function>min</function></funcdef> + <paramdef>array <parameter>numbers</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>min</function> a paraméterként átadott számként értelmezett értékek legkisebbjével tér vissza. + </para> + <para> + Ha az elsõ paraméter tömb típusú, akkor a tömbbeli legkisebb értéket adja vissza. + Ha az elsõ paraméter integer, float vagy string típusú, akkor legalább két paraméterrel + kell meghívni a függvényt, és az a legkisebb értékû számmal tér vissza. + Korlátlan számú paraméterrel hívható meg ez a függvény. + </para> + <para> + Ha legalább egy összehasonlítandó érték <type>float</type> típusú, akkor mindegyik float-ként lesz kezelve és a + visszatérési érték is float lesz. Ha egyik sem float, akkor mindegyik <type>integer</type>-ként lesz kezelve, és + a visszatérési érték is integer lesz. + </para> + </refsect1> + </refentry> + + <refentry id="function.mt-rand"> + <refnamediv> + <refname>mt_rand</refname> + <refpurpose>véletlenszámot generál - jobban :)</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>mt_rand</function></funcdef> + <void/> + </funcprototype> + <funcprototype> + <funcdef>int <function>mt_rand</function></funcdef> + <paramdef>int + <parameter>min</parameter> + </paramdef> + <paramdef>int + <parameter>max</parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + A régebbi libc-k véletlenszám generátorai kétes vagy bizonytalan + jellegûek és lassúak voltak. Alapértelmezés szerint, a PHP a + libc véletlenszám generátorát használja a <function>rand</function> + függvényben. A <function>mt_rand</function> függvény egy "beugrós" + helyettesítése ennek. Ez egy ismert jellemvonásokkal bíró véletlenszám + generátor, a Mersenne Twister, ami többféle kriptogáfiai eljárás + inicializálásához (seeding) is megfelelõ véletlenszámokat generál + kb. négyszer gyorsabban, mint az átlagos libc rand függvények. + (Részletesebb információkért nézd meg a Mersenne Twister honlapját, amely + <ulink url="&url.mersenne;">&url.mersenne;</ulink> , az MT forrás + optimalizált változata <ulink url="&url.mersenne.twister;">&url.mersenne.twister;</ulink> pedig + címen található. + </simpara> + <simpara> + Ha a <parameter>min</parameter> és <parameter>max</parameter> paraméterek + nélkül hívod meg az <function>mt_rand</function> függvényt, akkor + az ál véletlenszám értéke 0 és <constant>RAND_MAX</constant> közé fog esni. + Ha pl. 5 és 15 közé (bezárólag) esõ véletlen számot akarsz kapni, akkor + <literal>mt_rand(5, 15)</literal> kell írni. + </simpara> + <simpara> + Ne felejtsd el a véletlenszám generátor kiinduló értékét beállítani + a <function>mt_srand</function> függvénnyel. + </simpara> + <note> + <para> + A 3.0.7 verziók elõtt a <parameter>max</parameter> paraméter helyett <parameter>range</parameter> (tartomány) + szerepelt. Ezekben a verziókban az elõzõ példával egyenértékû megoldás a <literal>mt_rand (5, 11)</literal>, hogy + 5 és 15 közé esõ véletlen számot kapj. + </para> + </note> + <simpara> + Lásd még: <function>mt_srand</function>, + <function>mt_getrandmax</function>, <function>srand</function>, + <function>rand</function> és <function>getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.mt-srand"> + <refnamediv> + <refname>mt_srand</refname> + <refpurpose> beállítja a "jobbik" véletlenszám generátor kiinduló értékét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>mt_srand</function></funcdef> + <paramdef>int <parameter>seed</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Beállítja a véletlenszám generátor kiinduló értékét <parameter>seed</parameter>-re. + <informalexample> + <programlisting role="php"> +// beállítás ezredmásodpercekkel +function make_seed() { + list($usec, $sec) = explode(' ', microtime()); + return (float) $sec + ((float) $usec * 100000); +} +mt_srand(make_seed()); +$randval = mt_rand(); + </programlisting> + </informalexample> + </para> + <simpara> + Lásd még: <function>mt_rand</function>, + <function>mt_getrandmax</function>, <function>srand</function>, + <function>rand</function> és + <function>getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.mt-getrandmax"> + <refnamediv> + <refname>mt_getrandmax</refname> + <refpurpose>visszaadja a lehetséges legnagyobb véletlenszámot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>mt_getrandmax</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + Visszaadja azt a legnagyobb véletlenszámot, amit a <function>mt_rand</function> meghívásakor visszadhat. + </simpara> + <simpara> + Lásd még: <function>mt_rand</function>, + <function>mt_srand</function> <function>rand</function>, + <function>srand</function> és + <function>getrandmax</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.number-format"> + <refnamediv> + <refname>number_format</refname> + <refpurpose>ezres csoportosítással formázza a számot</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>number_format</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + <paramdef>int <parameter><optional>decimals</optional></parameter></paramdef> + <paramdef>string <parameter><optional>dec_point</optional></parameter></paramdef> + <paramdef>string <parameter><optional>thousands_sep</optional></parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>number_format</function> a <parameter>number</parameter> paraméter formázott értékével tér vissza. + A függvény egy, két vagy négy paramétert fogad el(de hármat nem): + </para> + <para> + Ha csak egy paraméter van megadva, akkor <parameter>number</parameter> törtrész nélkül, + de ezresenkénti csoportosítással kerül formázásra. ("," választva el a csoportokat) + </para> + <para> + Két paraméter esetén a <parameter>number</parameter> a <parameter>decimals</parameter>-ba megadott számú + tizedesre lesz formázva, ponttal (".") a tizedesek elõtt és vesszõvel (",") választva el a csoportokat. + </para> + <para> + Négy paraméter esetén a <parameter>number</parameter> a <parameter>decimals</parameter>-ba megadott számú + tizedesre lesz formázva. A tizedesek elõtt a <parameter>dec_point</parameter> áll a pont (".") helyett, + és a <parameter>thousands_sep</parameter> választja el a csoprtokat a vesszõ (",") helyett. + </para> + <note> + <para> + A <parameter>thousands_sep</parameter>-nak csak az elsõ karakterét használja a függvény. + Például Ha <literal>ize</literal>-t adsz meg mint <parameter>thousands_sep</parameter> + az <literal>1000</literal> szám esetén, akkor <function>number_format</function> + <literal>1i000</literal>-t fog visszaadni. + </para> + </note> + <para> + <example> + <title><function>number_format</function> példa</title> + <para> + Példaként, a francia jelölés általában két tizedest tartalmaz, és + vesszõt használ (',') a tizedesek elválasztására, és szóközzel (' ') + tagolja az egész részt. Ez a következõképpen érhetõ el: + </para> + <programlisting role="php"> +<?php + + $szam = 1234.56; + + // angol jelölés (alapértelmezés) + $angol_szam_forma = number_format($szam); + // 1,234.56 + + // francia jelölés + $francia_szam_forma = number_format($szam, 2, ',', ' '); + // 1 234,56 + + + $number = 1234.5678; + + // angol jelölés ezresek csoportosítása nélkül + $angol_szam_forma = number_format($szam, 2, '.', ''); + // 1234.56 + +?> + </programlisting> + </example> + </para> + <note> + <para> + Lásd még: <function>sprintf</function>, + <function>printf</function> és <function>sscanf</function>! + </para> + </note> + </refsect1> + </refentry> + + <refentry id="function.octdec"> + <refnamediv> + <refname>octdec</refname> + <refpurpose>nyolcas számrendszerbõl tízesbe vált át</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>octdec</function></funcdef> + <paramdef>string <parameter>octal_string</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A nyolcas számrendszerbeli <parameter>number</parameter> tízes számrendszerbeli megfelelõjével tér vissza. + A legnagyobb átváltható szám "17777777777", ami 2147483647-et (tízes számrendszerben) ad eredményül. + decimal. + </para> + <para> + Lásd még: <function>decoct</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.pi"> + <refnamediv> + <refname>pi</refname> + <refpurpose>visszaadja pi(&pi;) értékét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>pi</function></funcdef> + <void/> + </funcprototype> + </funcsynopsis> + <simpara> + PI megközelítõleg pontos értékét adja vissza. + </simpara> + <para> + <informalexample> + <programlisting> + +echo pi(); +// azt írja ki, hogy : 3.1415926535898 + + </programlisting> + </informalexample> + </para> + </refsect1> + </refentry> + + <refentry id="function.pow"> + <refnamediv> + <refname>pow</refname> + <refpurpose>hatványozás</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>number <function>pow</function></funcdef> + <paramdef>number <parameter>base</parameter></paramdef> + <paramdef>number <parameter>exp</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>base</parameter>-t a <parameter>exp</parameter> hatványra emelt értékével tér vissza. + Ha lehetséges, akkor a függvény visszatérési értéke <type>integer</type> lesz. + </para> + <para> + Ha a hatványérték nem számítható ki, akkor egy "nem fatális" (warning) hibát jelez + a <function>pow</function> függvény, és &false;-szal tér vissza. + </para> + <example> + <title>Néhány példa a <function>pow</function> alkalmazására</title> + <programlisting role="php"> +<![CDATA[ +<?php + +var_dump( pow(2,8) ); // int(256) +echo pow(-1,20); // 1 +echo pow(0, 0); // 1 + +echo pow(-1, 5.5); // hiba + +?> +]]> + </programlisting> + </example> + <warning> + <para> + PHP 4.0.6-ban és korábbi verziókban a <function>pow</function> mindig <type>float</type> típussal tért vissza, + és soha nem jelzett hibát. + </para> + </warning> + <para> + Lásd még: <function>exp</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.rad2deg"> + <refnamediv> + <refname>rad2deg</refname> + <refpurpose>radiánból fokokra vált</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>rad2deg</function></funcdef> + <paramdef>float <parameter>number</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ez a függvény a radiánban értlemezett <parameter>number</parameter> paramétert fokokba váltja. + </para> + <para> + Lásd még: <function>deg2rad</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.rand"> + <refnamediv> + <refname>rand</refname> + <refpurpose>véletlenszámot generál</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>rand</function></funcdef> + <void/> + </funcprototype> + <funcprototype> + <funcdef>int <function>rand</function></funcdef> + <paramdef>int + <parameter>min</parameter> + </paramdef> + <paramdef>int + <parameter>max</parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <simpara> + Ha a <parameter>min</parameter> és <parameter>max</parameter> paraméterek + nélkül hívod meg az <function>mt_rand</function> függvényt, akkor + az ál véletlenszám értéke 0 és <constant>RAND_MAX</constant> közé fog esni. + Ha pl. 5 és 15 közé (bezárólag) esõ véletlen számot akarsz kapni, akkor + <literal>mt_rand(5, 15)</literal> kell írni. + </simpara> + <simpara> + Ne felejtsd el a véletlenszám generátor kiinduló értékét beállítani + a <function>srand</function> függvénnyel. + </simpara> + <note> + <para> + A 3.0.7 verziók elõtt a <parameter>max</parameter> paraméter helyett <parameter>range</parameter> (tartomány) + szerepelt. Ezekben a verziókban az elõzõ példával egyenértékû megoldás a <literal>mt_rand (5, 11)</literal>, hogy + 5 és 15 közé esõ véletlen számot kapj. + </para> + </note> + <simpara> + Lásd még: <function>srand</function>, + <function>getrandmax</function>, <function>mt_rand</function>, + <function>mt_srand</function> és + <function>mt_getrandmax</function>. + </simpara> + </refsect1> + </refentry> + + <refentry id="function.round"> + <refnamediv> + <refname>round</refname> + <refpurpose>lebegõpontos számot kerekít</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>round</function></funcdef> + <paramdef>float <parameter>val</parameter></paramdef> + <paramdef>int + <parameter><optional>precision</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>val</parameter> paraméter <parameter>precision</parameter>-ban megadott pontosságra + kerekített értékével tér vissza. A <parameter>precision</parameter> a tizedespont után álló + számjegyek számát jelenti. + A <parameter>precision</parameter> nulla vagy negatív szám is lehet. + </para> + <para> + <caution> + <simpara> + PHP nem kezeli megfelelõen a <literal>"12,300.2"</literal>-hez hasonló sztringeket alapértelmezés szerint. + Lásd <link linkend="language.types.string.conversion">string konverziók</link>. + </simpara> + </caution> + </para> + <para> + <informalexample> + <programlisting role="php"> +$ize = round(3.4); // $ize == 3.0 +$ize = round(3.5); // $ize == 4.0 +$ize = round(3.6); // $ize == 4.0 +$ize = round(3.6, 0); // a fentivel azonos + +$ize = round(1.95583, 2); // $ize == 1.96 + +$ize = round(1241757, -3); // $ize == 1242000 + </programlisting> + </informalexample> + </para> + <note> + <simpara> + A <parameter>precision</parameter> paraméter csak PHP 4-tõl használható. + </simpara> + </note> + <simpara> + Lásd még: <function>ceil</function> és <function>floor</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.sin"> + <refnamediv> + <refname>sin</refname> + <refpurpose>szinusz</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>sin</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiánban megadott <parameter>arg</parameter> szinuszát adja vissza. + </para> + <para> + Lásd még: <function>cos</function> és <function>tan</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.sqrt"> + <refnamediv> + <refname>sqrt</refname> + <refpurpose>négyzetgyököt von</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>sqrt</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Az <parameter>arg</parameter> négyzetgzökét adja vissza. + </para> + </refsect1> + </refentry> + + <refentry id="function.srand"> + <refnamediv> + <refname>srand</refname> + <refpurpose>a véletlenszámgenerátor kiinduló értékét állítja be</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>void <function>srand</function></funcdef> + <paramdef>int <parameter>seed</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + Beállítja a véletlenszám generátor kiinduló értékét <parameter>seed</parameter>-re. + <informalexample> + <programlisting role="php"> +// beállítás ezredmásodpercekkel +function make_seed() { + list($usec, $sec) = explode(' ', microtime()); + return (float) $sec + ((float) $usec * 100000); +} +srand(make_seed()); +$randval = rand(); + </programlisting> + </informalexample> + </para> + <simpara> + Lásd még: <function>rand</function>, + <function>getrandmax</function>, <function>mt_rand</function>, + <function>mt_srand</function> és + <function>mt_getrandmax</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.tan"> + <refnamediv> + <refname>tan</refname> + <refpurpose>tangens</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>float <function>tan</function></funcdef> + <paramdef>float <parameter>arg</parameter></paramdef> + </funcprototype> + </funcsynopsis> + <para> + A radiánban megadott <parameter>arg</parameter> tangensét adja vissza. + </para> + <para> + Lásd még: <function>sin</function> és <function>cos</function>! + </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 +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 +--> Index: phpdoc/hu/functions/pcre.xml diff -u /dev/null phpdoc/hu/functions/pcre.xml:1.3 --- /dev/null Fri Dec 7 10:52:53 2001 +++ phpdoc/hu/functions/pcre.xml Fri Dec 7 10:52:50 2001 @@ -0,0 +1,2571 @@ +<?xml version="1.0" encoding="iso-8859-2"?> +<!-- EN-Revision: 1.61 Maintainer: pgerzson Status: ready --> +<reference id="ref.pcre"> + <title>Reguláris kifejezések függvényei (Perl kompatibilis)</title> + <titleabbrev>PCRE</titleabbrev> + + <partintro> + <para> + Ezekben a függvényekben használatos minták szintaktikája nagyon + hasonlít a PERL-ben megismerthez. A kifejezéseket határolójelek + közé kell rakni, például perjelek / közé. Az alfanumerikus karakterektõl + és a visszaperjeltõl (\) eltekintve bármi használható határolójelként. Ha a + határolójel magában a kifejezésben is szerepel, akkor egy visszaperjelet + (\) kell eléírni. A PHP 4.0.4-s verziójától kezdve lehetõség van a (), {}, [], és <> párban álló határolók használatára, ahogy Perl-ben is. + </para> + <para> + A lezáró határolójelet különféle módosítók követhetik, amelyek a + mintailleszkedést befolyásolják. Bõvebben: <link linkend="pcre.pattern.modifiers">Minta módosítók</link> fejezet. + </para> + <para> + <example> + <title>Példák érvényes mintákra</title> + <itemizedlist> + <listitem><simpara>/<\/\w+>/</simpara></listitem> + <listitem><simpara>|(\d{3})-\d+|Sm</simpara></listitem> + <listitem><simpara>/^(?i)php[34]/</simpara></listitem> + <listitem><simpara>{^\s+(\s+)?$}</simpara></listitem> + </itemizedlist> + </example> + </para> + <para> + <example> + <title>Példák helytelen mintákra</title> + <itemizedlist> + <listitem> + <simpara> + /href='(.*)' - hiányzó lezáró határolókarakter + </simpara> + </listitem> + <listitem> + <simpara> + /\w+\s*\w+/J - ismeretlen módosító 'J' + </simpara> + </listitem> + <listitem> + <simpara> + 1-\d3-\d3-\d4| - hiányzó kezdõ határolókarakter + </simpara> + </listitem> + </itemizedlist> + </example> + </para> + <note> + <simpara> + A Perl kompatibilis reguláris függvények PHP4-tõl és PHP 3.0.9-tõl + hozzáférhetõk. + </simpara> + <simpara> + A reguláris kifejezések támogatását a PCRE könyvtár biztosítja. + Ez nyílt forráskódú szoftver, amit Philip Hazel írt, és a szerzõi + jogok az angliai Cambridge Egyetem tulajdona. A csomag hozzáférhetõ + a <ulink url="&url.pcre;">&url.pcre;</ulink> címen. + </simpara> + </note> + </partintro> + + <refentry id="function.preg-match"> + <refnamediv> + <refname>preg_match</refname> + <refpurpose>Reguláris kifejezést illeszt a megadott szövegre</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>preg_match</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>array + <parameter><optional>matches</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter> szövegben egyezést keres a + <parameter>pattern</parameter> mintában megadott reguláris kifejezéssel. + </para> + <para> + Ha a <parameter>matches</parameter> paraméterrel hívod meg, akkor a + keresés végeredményét ebbe tárolja el a függvény. A $matches[0] + tartalmazza azt a szövegrészt, ami a teljes mintára illeszkedett, és a + további elemek ($matches[1] és így tovább) azokat, amelyek a tömbindex + szerinti "gyûjtõ" részmintákra illeszkedtek. + </para> + <para> + Ez a függvény &true;-val tér vissza, ha a <parameter>pattern</parameter> + mintát sikerült illesztenie a <parameter>subject</parameter> szövegre, + egyébként - sikertelen illesztés vagy hiba esetén - &false;-szal. + </para> + <para> + <example> + <title>A "php" sztring keresése</title> + <programlisting role="php"> +// az "i" a minta határolójele után azt jelzi, +// hogy a kis- és nagybetûkre közömbös a keresés. +if (preg_match ("/php/i", "PHP a web-scripting nyelvek egyike.")) { + print "A minta passzol."; +} else { + print "A minta nem passzol."; +} + </programlisting> + </example> + <example> + <title>A "web" szó keresése</title> + <programlisting role="php"> +// a mintában a \b szóhatárt jelöl, ezért csak a különálló +// "web" szavakra fog illeszkedni, és szórészletekre +// úgymint "webbing" vagy "cobweb" pedig nem. +if (preg_match ("/\bweb\b/i", "PHP a web scripting nyelvek egyike.")) +{ + print "A minta passzol."; +} else { + print "A match nem passzol."; +} +if (preg_match ("/\bweb\b/i", "PHP a website scripting nyelvek egyike.")) { + print "A minta passzol."; +} else { + print "A match nem passzol."; +} + </programlisting> + </example> + <example> + <title> domain-név kinyerése URL-bõl</title> + <programlisting role="php"> +// gazdagép neve az URL-bõl +preg_match("/^(http:\/\/)?([^\/]+)/i", +"http://www.php.net/index.html", $matches); +$host = $matches[2]; +// a gazdagépnév utolsó két része +preg_match("/[^\.\/]+\.[^\.\/]+$/",$host,$matches); +echo "A domain név : ".$matches[0]."\n"; + </programlisting> + </example> + Ez a példa a következõt eredményezi: + <programlisting> +A domain név : php.net + </programlisting> + Lásd még: <function>preg_match_all</function>, + <function>preg_replace</function> és + <function>preg_split</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-match-all"> + <refnamediv> + <refname>preg_match_all</refname> + <refpurpose>Reguláris kifejezés teljeskörû illesztését végzi</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>int <function>preg_match_all</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>array <parameter>matches</parameter></paramdef> + <paramdef>int + <parameter><optional>order</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter> szövegben megkeresi az összes, a + <parameter>pattern</parameter> mintára illeszkedõ + részt, és a <parameter>matches</parameter> tömbbe menti azokat a + <parameter>order</parameter> paraméterben meghatározott sorrendben. + </para> + <para> + Amint az elsõ illeszkedés megtalálta, a soronkövetkezõ illesztés az + utolsó illeszkedéstõl kezdõdik. + </para> + <para> + Az <parameter>order</parameter> paraméter két értéket vehet fel: + <variablelist> + <varlistentry> + <term>PREG_PATTERN_ORDER</term> + <listitem> + <para> + Azt eredményezi, hogy a $matches[0] egy tömb lesz, ahol az összes a + teljes mintára illeszkedõ szövegrész lesz egymás után, $matches[1] + tömbben pedig azok a szövegrészek, amelyek elsõ "begyûjtõ" + részmintára illeszkednek, és így tovább. + <informalexample> + <programlisting role="php"> +preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", + "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", + $out, PREG_PATTERN_ORDER); +print $out[0][0].", ".$out[0][1]."\n"; +print $out[1][0].", ".$out[1][1]."\n" + </programlisting> + </informalexample> + Ez a példa az alábbi eredményt adja: + <informalexample> + <programlisting> +<b>példa: </b>, <div align=left>ez itt a teszt szöveg</div> +példa: , ez itt a teszt szöveg + </programlisting> + </informalexample> + Tehát, az $out[0] egy tömb az összes, teljes mintára illeszkedõ + szöveggel, és $out[1] egy tömb az összes HTML-elem közti szöveggel. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term>PREG_SET_ORDER</term> + <listitem> + <para> + Azt eredményezi, hogy $matches[0]-ben az elsõ illesztés eredményeit, + a $matches[1] a második eredményeit fogja tartalmazni, és így tovább. + <informalexample> + <programlisting role="php"> +preg_match_all ("|<[^>]+>(.*)</[^>]+>|U", + "<b>példa: </b><div align=left>ez itt a teszt szöveg</div>", + $out, PREG_SET_ORDER); +print $out[0][0].", ".$out[0][1]."\n"; +print $out[1][0].", ".$out[1][1]."\n" + </programlisting> + </informalexample> + Ez a példa az alábbi eredményt adja: + <informalexample> + <programlisting role="php"> +<b>példa: </b>, példa: +<div align=left>ez itt a teszt szöveg</div>, ez itt a teszt szöveg + </programlisting> + </informalexample> + Ebben az esetben $matches[0] az elsõ illesztés során megtalált + szövegrészeket tartalmazza, a $matches[0][0]-ben a teljes mintára + illeszkedõ szöveggel, $matches[0][1]-ben az elsõ "gyûjtõ" részmintára + illeszkedõ résszel, és így tovább. Ehhez hasonlóan $matches[1] a + második illesztés során megtalált szövegeket tartalmazza, stb. + </para> + </listitem> + </varlistentry> + </variablelist></para> + <para> + Ha nincs megadva az <parameter>order</parameter> paraméter, akkor az + alapértelmezés a PREG_PATTERN_ORDER. + </para> + <para> + Ez a függvény az összes illeszkedés számával tér vissza, vagy + &false;-szal sikertelen illesztés vagy hiba esetén. + </para> + <para> + <example> + <title>Az összes telefonszám kigyûjtése egy adott szövegbõl.</title> + <programlisting role="php"> +preg_match_all ("/\(? (\d{3})? \)? (?(1) [\-\s] ) \d{3}-\d{4}/x", + "Hívd a 555-1212 vagy 1-800-555-1212 számot", $phones); + </programlisting> + </example> + </para> + <para> + <example> + <title>HTML elemek keresése (mohón)</title> + <programlisting role="php"> +// A \\2 példa a hivatkozásra. Ez mondja meg PCRE-nek, hogy a másodikként +// megadott kerek zárójelre - ami ebben az esetben ([\w]+) - illesztett +// szövegnek kell szerepelnie azon a helyen is. A plusz visszaperjelre azért +// van szükség, mert a minta macskakörmök ("") közé van fogva. +$html = "<b>félkövér szöveg</b><a href=howdy.html>kattints ide</a> + +preg_match_all ("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, +$matches); + +for ($i=0; $i< count($matches[0]); $i++) { +echo "passzolt: ".$matches[0][$i]."\n"; +echo "1. rész: ".$matches[1][$i]."\n"; +echo "2. rész: ".$matches[3][$i]."\n"; +echo "3. rész: ".$matches[4][$i]."\n\n"; +} + </programlisting> + </example> + A példa ezt eredményezi: + <programlisting> +passzolt: <b>félkövér szöveg</b> +1. rész: <b> +2. rész: félkövér szöveg +3. rész: </b> + +passzolt: <a href=howdy.html>kattints ide</a> +1. rész: <a href=howdy.html> +2. rész: kattints ide +3. rész: </a> + </programlisting> + </para> + <simpara> + Lásd még: <function>preg_match</function>, + <function>preg_replace</function>, + és <function>preg_split</function>! + </simpara> + </refsect1> + </refentry> + + <refentry id="function.preg-replace"> + <refnamediv> + <refname>preg_replace</refname> + <refpurpose>Reguláris kifejezés alapján keres és cserél</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>preg_replace</function></funcdef> + <paramdef>mixed <parameter>pattern</parameter></paramdef> + <paramdef>mixed <parameter>replacement</parameter></paramdef> + <paramdef>mixed <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <parameter>subject</parameter>-ben megadott szövegben keres a + <parameter>pattern</parameter> paraméterben megadott mintára illeszkedõ + részeket és azokat lecseréli a + <parameter>replacement</parameter>-ben megadott kifejezésre. Ha a <parameter>limit</parameter> is szerepel, akkor csak + <parameter>limit</parameter> számú illeszkedõ rész lesz cserélve, + ha <parameter>limit</parameter> hiányzik vagy értéke -1, akkor minden + illeszkedõ részt cserél. + </para> + <para> + A <parameter>replacement</parameter>-ben hivatkozásokat is el lehet + helyezni <literal>\\<replaceable>n</replaceable></literal> vagy + (PHP 4.0.4-tõl kezdve) <literal><replaceable>$n</replaceable></literal> + alakban(ez utóbbit részesítsd elõnyben). Minden ilyen hivatkozás + az <replaceable>n</replaceable>. zárójelezett részminta által megtalált + szöveggel lesz helyettesítve. Az <replaceable>n</replaceable> értéke + 0-tól 99-ig terjedhet, ahol is a <literal>\\0</literal> vagy + <literal>$0</literal> hivatkozás az egész mintára illeszkedõ szöveget + jelenti. A kerek nyitó zárójelek 1-tõl kezdve balról jobbra vannak + számozva és az általuk bevezetett "gyûjtõ" részminták sorszámát adják. + </para> + <para> + Ha volt egyezés, akkor az új <parameter>subject</parameter>-tel tér + vissza a függvény, egyébként a változatlanul hagyott + <parameter>subject</parameter>-tel. + </para> + <para> + A <function>preg_replace</function>-nek átadott minden paraméter lehet + tömb is. + </para> + <para> + Ha <parameter>subject</parameter> tömb típusú, akkor a keresés és a + helyettesítés a tömb minden elemén végrehajtódik, és a visszatérési érték + is tömb lesz. + </para> + <para> + Ha a <parameter>pattern</parameter> és + <parameter>replacement</parameter> paraméterek tömb típusúak, akkor a + <function>preg_replace</function>veszi a tömbök elemeit és mindegyikkel + páronként elvégzi a keresést és a helyettesítést a + <parameter>subject</parameter> szövegen. Ha a + <parameter>replacement</parameter> tömbnek a + <parameter>pattern</parameter> tömbnél a kevesebb eleme van, akkor + a pár nélküli mintákat üres sztringgel fogja helyettesíteni. Ha a + <parameter>pattern </parameter> tömb és + <parameter>replacement</parameter> sztring típusú, akkor ezt a + helyettesítési szöveget használja minden + <parameter>pattern</parameter>-beli mintához. + A fordított esetnek nem lenne sok értelme. + </para> + <para> + Az <literal>/e</literal> módosító hatására a + <function>preg_replace</function> a + <parameter>replacement</parameter> paramétert PHP kódként értelmezi, + miután a hivatkozások behelyettesítését elvégezte. Tipp: bizonyosodj meg + arról, hogy <parameter>replacement</parameter> érvényes PHP kódnak felel + meg (sztringben megadva), másképp a PHP szintaktikai hibát (Parse Error) + fog jelezni abban a sorban, ahol a <function>preg_replace</function> + függvényt meghívtad. + </para> + <para> + <example> + <title>Néhány érték cseréje</title> + <programlisting> +$mintak = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/", + "/^\s*{(\w+)}\s*=/"); +$csere = array ("\\3/\\4/\\1\\2", "$\\1 ="); +print preg_replace ($mintak, $csere, "{kezdoDatum} = 1999-5-27"); + </programlisting> + </example> + Ennek a példának a végeredménye: + <programlisting> +$kezdoDatum = 5/27/1999 + </programlisting> + <example> + <title>Az /e módosítót használata:</title> + <programlisting role="php"> +preg_replace ("/(<\/?)(\w+)([^>]*>)/e", + "'\\1'.strtoupper('\\2').'\\3'", + $html_body); + </programlisting> + <para> +Ez az összes HTML elemet nagybetûsre cseréli a bemeneti szövegben. + </para> + </example> + <example> + <title>HTML-bõl sima szöveggé konvertálás</title> + <programlisting role="php"> +// A $dokumentum HTML formátumú. +// Minden HTML elemet, javascript szakaszt és térközt eltávolít a +// dokumentumból. Ezenkívül néhány megszokott HTML entitást is a +// sima, karakteres megfelelõikre konvertál. + +$mit = array ("'<script[^>]*?>.*?</script>'si", // javascript eltüntetése + "'<[\/\!]*?[^<>]*?>'si", // HTML elemek eltüntetése + "'([\r\n])[\s]+'", // térközök + "'&(quot|#34);'i", // HTML entitások + "'&(amp|#38);'i", + "'&(lt|#60);'i", + "'&(gt|#62);'i", + "'&(nbsp|#160);'i", + "'&(iexcl|#161);'i", + "'&(cent|#162);'i", + "'&(pound|#163);'i", + "'&(copy|#169);'i", + "'&#(\d+);'e"); // PHP kódként értelmezze + +$mire = array ("", + "", + "\\1", + "\"", + "&", + "<", + ">", + " ", + chr(161), + chr(162), + chr(163), + chr(169), + "chr(\\1)"); + +$szoveg = preg_replace ($mit, $mire, $dokumentum); + </programlisting> + </example> + </para> + <note> + <para> + A <parameter>limit</parameter> paraméter a PHP 4.0.1pl2 után került a + nyelvbe. + </para> + </note> + <para> + Lásd még: <function>preg_match</function>, + <function>preg_match_all</function> és + <function>preg_split</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-replace-callback"> + <refnamediv> + <refname>preg_replace_callback</refname> + <refpurpose>Reguláris kifejezés alapján keres és a megadott függvényt meghívva végzi a cserét</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>mixed <function>preg_replace_callback</function></funcdef> + <paramdef>mixed <parameter>pattern</parameter></paramdef> + <paramdef>mixed <parameter>callback</parameter></paramdef> + <paramdef>mixed <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + Ennek a függvénynek a mûködése szinte azonos a + <function>preg_replace</function> függvényével azt leszámítva, hogy + <parameter>replacement</parameter> paraméterként egy + <parameter>callback</parameter> függvényt kell megadni, amely minden + sikeres illesztésnél meghívásra kerül, amelynek az illeszkedõ szövegeket egy + tömbben adja át a PHP. A 'meghívott' függvénynek a helyettesítési + szöveggel kell visszatérnie. Ez a függvény a PHP 4.0.5-tõl elérhetõ. + </para> + <para> + Lásd még: <function>preg_replace</function>! + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-split"> + <refnamediv> + <refname>preg_split</refname> + <refpurpose>Sztringet darabol fel reguláris kifejezésre illeszkedõ részei mentén</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>preg_split</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>string <parameter>subject</parameter></paramdef> + <paramdef>int + <parameter><optional>limit</optional></parameter> + </paramdef> + <paramdef>int + <parameter><optional>flags</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + + <note> + <para> + A <parameter>flags</parameter> paraméterrel a PHP 4 Beta 3-ban lett + kiegészítve. + </para> + </note> + + <para> + Ez a függvény a <parameter>pattern</parameter> minta illesztésének + határai mentén darabolja fel <parameter>subject</parameter> szöveget, + és a szövegdarabokat tömbbe összefogva adja vissza. + </para> + + <para> + Ha a <parameter>limit</parameter> meg van adva, akkor csak + <parameter>limit</parameter> számú darabbal tér vissza. Ha a + <parameter>limit</parameter> értéke -1, az azt jelenti, nincs ilyen + korlát, és ez akkor hasznos, ha a <parameter>flags</parameter> + paraméter értékét is szeretnéd megadni. + </para> + + <para> + A <parameter>flags</parameter> a következõ jelzõknek bármilyen + kombinációja lehet a ( bitszintû | operátorral): + <variablelist> + <varlistentry> + <term>PREG_SPLIT_NO_EMPTY</term> + <listitem> + <simpara> + Ekkor csak a nem üres szövegrészeket adja vissza a + <function>preg_split</function>. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term>PREG_SPLIT_DELIM_CAPTURE</term> + <listitem> + <simpara> + Ekkor a kerekzárójelek közé fogott ("gyûjtõ") részmintára + illeszkedõ szövegrészeket is visszadja a függvény. + Ez a jelzõ 4.0.5 verziótól használható. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + <example> + <title><function>preg_split</function> példa : a keresett szöveg + kucslszavait adja vissza.</title> + <programlisting role="php"> +// Feldarabolja a kifejezést vesszõk és térközkarakterek mentén, +// amelyek a következõk " ", \r, \t, \n és \f . +$kulcsszavak = preg_split ("/[\s,]+/", "hypertext language, programming"); + </programlisting> + </example> + </para> + <para> + <example> + <title>Sztring karakterekre darabolása</title> + <programlisting role="php"> +$sztring = 'karakterfûzér'; +$karakterek = preg_split('//', $sztring, -1, PREG_SPLIT_NO_EMPTY); +print_r($karakterek); + </programlisting> + </example> + </para> + <para> + Lásd még: + <function>spliti</function>, + <function>split</function>, + <function>implode</function>, + <function>preg_match</function>, + <function>preg_match_all</function> és + <function>preg_replace</function>! + </para> + + </refsect1> + </refentry> + + <refentry id="function.preg-quote"> + <refnamediv> + <refname>preg_quote</refname> + <refpurpose>Reguláris kifejezés metakaraktereit literálissá + változtatja</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>string <function>preg_quote</function></funcdef> + <paramdef>string <parameter>str</parameter></paramdef> + <paramdef>string + <parameter><optional>delimiter</optional></parameter> + </paramdef> + </funcprototype> + </funcsynopsis> + <para> + A <function>preg_quote</function> függvény az <parameter>str</parameter> + paraméterben kapott szövegben minden olyan karakter elé egy + visszaperjelet helyez el, amely egy reguláris kifejezésben speciális + jelentéssel bírhat. Ez akkor hasznos, ha olyan futási idõ alatt + összeállított sztringet akarsz egy mintában felhasználni, amelyben + elõfordulhatnak speciális jelentéssel bíró reguláris karakterek. + </para> + <para> + Ha a nem kötelezõ <parameter>delimiter</parameter>-t is megadod, akkor ez + a karakter is visszaperjellel lesz bevezetve. Ez pedig azért hasznos, + mert PCRE által megkövetelt határolójeleket is le tudod kezelni így. + A / a leggyakrabban használt határolójel.</para> + <para> + A reguláris kifejezésekben elõforduló speciális karakterek: + <screen>. \ + * ? [ ^ ] $ ( ) { } = ! < > | :</screen> + </para> + <para> + <example> + <title></title> + <programlisting role="php"> +$kulcsszavak = "$40 egy g3/400-ért"; +$kulcsszavak = preg_quote ($keywords, "/"); +echo $kulcsszavak; // \$40 egy g3\/400-ért adja vissza + </programlisting> + </example> + <example> + <title>Adott szöveg megdöntése</title> + <programlisting role="php"> + +// Ebben a példában preg_quote($szo)-t használjuk arra, hogy +// a csillagokat megfosszuk a reguláris kifejezésekben használt +// speciális jelentésüktõl. + +$szoveg = "Ezt a könyvet *nagyon* nehéz megtalálni."; +$szo = "*nagyon*"; +$szoveg = preg_replace ("/".preg_quote($szo)."/", + "<i>".$szo."</i>", + $szoveg); + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="function.preg-grep"> + <refnamediv> + <refname>preg_grep</refname> + <refpurpose> + Visszaadja azokat a tömbelemeket, amelyek illeszkednek a mintára + </refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <funcsynopsis> + <funcprototype> + <funcdef>array <function>preg_grep</function></funcdef> + <paramdef>string <parameter>pattern</parameter></paramdef> + <paramdef>array <parameter>input</parameter></paramdef> + </funcprototype> + </funcsynopsis> + + <para> + A <function>preg_grep</function> függvény egy olyan tömbbel tér vissza, + amelyben az <parameter>input</parameter> tömb azon elemei szerepelnek, + amelyek a <parameter>pattern</parameter> mintára illeszkedtek.</para> + <para> + PHP 4.0.4-tõl kezdve a <function>preg_grep</function> függvény + eredményeként visszaadot tömb az <parameter>input</parameter> indexeit használja. Ha nem ezt + akarod, akkor használd a <function>array_values</function> függvényt + a <function>preg_grep</function> által visszaadott tömb + újraindexeléséhez.</para> + <para> + <example> + <title><function>preg_grep</function> példa</title> + <programlisting role="php"> +// visszad minden olyan $tomb-beli elemet, ami lebegõpontos számot tartalmaz +$lebegopontos_tomb = preg_grep ("/^(\d+)?\.\d+$/", $tomb); + </programlisting> + </example> + </para> + </refsect1> + </refentry> + + <refentry id="pcre.pattern.modifiers"> + <refnamediv> + <refname>Minta módosítók</refname> + <refpurpose>A lehetséges, PCRE reguláris kifejezéseket kiértékelését + befolyásoló módosítók felsorolása</refpurpose> + </refnamediv> + <refsect1> + <title>Leírás</title> + <para> + Itt látható a pillanatnyilag használható PCRE módosítók listája. + A zárójelekben közölt nevek a módosítók PCRE-ben használt belsõ nevei. + </para> + <para> + <blockquote> + <variablelist> + <varlistentry> + <term><emphasis>i</emphasis> (PCRE_CASELESS)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a minta a nagy- és kisbetûk + különbözõségére érzéketlen, a mintában elõforduló betûk mind a kis- + mind a nagybetûkre illeszkednek. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>m</emphasis> (PCRE_MULTILINE)</term> + <listitem> + <simpara> + Alapértelmezés szerint PCRE úgy tekinti a tárgyszöveget, mintha az + egyetlen sorból állna (mégha történetesen tartalmaz is néhány újsor + karaktert). A "sor eleje" metakarakter (^) csakis a tárgyszöveg + elejére, míg a "sor vége" metakarakter ($) csakis a szöveg végére + vagy a lezáró újsor-karakterre engedi illeszteni a mintát - kivéve + ha <emphasis>D</emphasis> módosító be van kapcsolva. Ez ugyanúgy + mûködik, mint Perl-ben. + </simpara> + <simpara> + Amikor ez a módosító be van kapcsolva, akkor "sor eleje" illetve + "sor vége" szerkezetek közvetlenül a következõ illetve közvetlenül a + megelõzõ újsor karakterekre, és a szöveg legelejére illetve + legvégére illeszkednek. Ez egyenértékû Perl /m módosítójával. + Ha nincs a tárgyszövegben "\n" karakter vagy a mintában nincs ^ + illetve $, akkor ennek a módosítónak nincs hatása. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>s</emphasis> (PCRE_DOTALL)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, a mintában elõforduló . + metakarakter minden karakterre - beleértve az újsor karaktert is - + illeszkedik, míg enélkül az újsor karakterre nem illeszkedne. + Ez egyenértékû a Perl /s módosítójával. A tagadó karakterosztályok + (mint például [^a]) mindig illeszkednek az újsor karakterre + függetlenül ennek a módósítónak a beállításától. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>x</emphasis> (PCRE_EXTENDED)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a mintában szereplõ + térközök - kivéve visszaperjelet elétéve vagy a + karakterosztályokon belülieket - nem lesznek részei a mintának, + valamint minden karakter, amely karakterosztályon kívüli literális # + és a rákövetkezõ újsorkarakter közé esik, figyelmen kívül hagy a + PCRE. Ez egyenértékû a Perl /x módosítójával, ami lehetõvé teszi + megjegyzések elhelyezését a bonyolultabb mintákban. Megjegyzendõ, + hogy ez csak bizonyos poziciókra vonatkozik, térközkarakterek soha + nem szerepelhetnek speciális karaktersorozatokban, mint például (?( + -ban, ami egy feltételes részminta kezdetét jelöli. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>e</emphasis></term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor <function>preg_replace + </function> függvény a helyettesítési paraméterként kapott + sztringet - a hivatkozások feloldása után - PHP kódként értelmezi, + és ennek a kódnak az eredményét helyettesíti be a keresett szöveg + helyére. + </simpara> + <simpara> + Csak a <function>preg_replace</function> használja ezt a módosítót, + a többi PCRE függvény figyelmen kívül hagyja. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>A</emphasis> (PCRE_ANCHORED)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor a keresett mintát + "lerögzíti", ami annyit jelent, hogy a minta illesztése + korlátozva van a tárgyszöveg elejére. Ezt a hatást elérhetjük + ha magát a mintát megfelelõen alakítjuk ki, miként Perl-ben ennek ez + az egyetlen módja. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>D</emphasis> (PCRE_DOLLAR_ENDONLY)</term> + <listitem> + <simpara> + Ha ez a módosító be van kapcsolva, akkor dollár metakarakter ($) + a mintán belül csak a tárgyszöveg végére illeszkedik. Enélkül + a módosító nélkül a $ a legutolsó újsorkarakter elõtti pozicióra is + illeszkedik, de semmilyen más poziciójú újsorkarakter elõtt nem. + Ezt a módosítót figyelmen kívül hagyja a PCRE, ha a + <emphasis>m</emphasis> be van kapcsolva. Nincs megfelelõje Perl-ben. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>S</emphasis></term> + <listitem> + <simpara> + Ha egy mintát többször használunk, akkor érdemes több idõt hagyni + a kiértékelésére, hogy az illesztésre fordított idõ + lerövidülhessen. Ennek a módosítónak a bekapcsolásával ezt többletet + biztosítjuk. Jelenleg, csak olyan nem "rögzített" minták esetén + hasznos, amelyek nem egy egyszerû, rögzített karakterrel kezdõdnek. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>U</emphasis> (PCRE_UNGREEDY)</term> + <listitem> + <simpara> + Ez a módosító megfordítja a kvantorok (sokszorozók) mohóságát, + azaz alapértelmezés szerint nem lesznek mohók, csak ha egy ? követi + azokat. Ez nem Perl-kompatibilis. A mintában is beállítható + (?U) sorozat megadásával. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>X</emphasis> (PCRE_EXTRA)</term> + <listitem> + <simpara> + Ez a módosító PCRE további lehetõségeit teszi elérhetõvé, amelyek + nem Perl-kompatibilisak. Valamennyi visszaperjel a mintában, amit + olyan karakter követ, aminek nincs speciális jelentése, hibát okoz, + és ilyenformán lefoglalja ezeket a karakterkombinációkat a jövõbeni + kiterjesztések elõtt. Alapértelmezés szerint az ilyen különleges + jelentés nélküli karakter elõtt álló visszaperjelet a Perl betû + szerint veszi. Jelenleg nincs más jellegzetesség, amit ez a módosító + befolyásolna. + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>u</emphasis> (PCRE_UTF8)</term> + <listitem> + <simpara> + Ez a módosító is PCRE olyan további lehetõségét teszi elérhetõvé, + ami nem Perl-kompatibilis. A mintát UTF-8 kódolású szövegnek + tekinti. Ez a módosító PHP 4.1.0-tõl kezdve érhetõ el. + </simpara> + </listitem> + </varlistentry> + </variablelist> + </blockquote> + </para> + </refsect1> + </refentry> + + <refentry id="pcre.pattern.syntax"> + + <refnamediv> + <refname>Regurális kifejezések szintaxisa</refname> + <refpurpose>PCRE regurális kifejezések nyelvtanának leírása</refpurpose> + </refnamediv> + + <refsect1> + <title>Leírás</title> + <simpara> + A PCRE könyvtár függvények sorát tartalmazza, amelyek reguláris + kifejezések mintaillesztését végzik el ugyanazt a szintaxist és + szemantikát használva - néhány eltérést nem számítva -, mint a Perl 5. + (lásd alább). A jelenlegi megvalósítás Perl 5.005-höz hasonló. + </simpara> + </refsect1> + + <refsect1> + <title>Perl-tõl való eltérések</title> + <para> + Különbségek Perl 5.005-höz képest: + <orderedlist> + <listitem> + <simpara> + 1. Alapértelmezés szerint térköznek tekintendõ minden olyan karakter, + amit a C könyvtár isspace() függvénye felismer, bár lehetõség van arra, + hogy PCRE-t eltérõ karakterkódtáblázattal fordítsuk le. Az isspace() + rendszerint a szóköz, lapdobás, "kocsi-vissza", újsor és vízszintes + illetve függõleges tabulátorokat tekinti térköznek. Perl 5-ben ez utóbbi + már nem szerepel a listában. A \v szekvencia nagyon sokáig benne volt a + Perl dokumentációjában, valójában soha nem ismerte fel mintaillesztés + közben. Legalább az 5.002 verzióig ezt a karaktert is térköznek + tekintették, de a 5.004 és 5.005 verziókban már nem illeszkedik a \s-re. + </simpara> + </listitem> + <listitem> + <simpara> + 2. PCRE nem engedi meg az elõretekintõ tesztekben (lookahead assertion) + a kvantorok (sokszorozók) használatát. Perl-ben ez megengedett, de nem a + várt eredményt adja. Például (?!a){3}, nem azt jelenti, hogy teszteli, vajon + a következõ három karakter nem "a", hanem azt, hogy háromszor "jelenti", + ha a következõ karakter nem "a". + </simpara> + </listitem> + <listitem> + <simpara> + 3. Tagadó elõretekintõ tesztekben (negated lookahead assertion) szereplõ + "begyûjtõ" részminták (capturing subpatterns) számon vannak tartva, de a + hozzájuk tartozó numerikus változók soha nem kerülnek feltöltésre. + Perl feltölti ezeket a numerikus változókat valamilyen, a sikertelen + teszt elõtti mintára illeszkedõ részt követõ karakterekkel, de csak + akkor, ha a tagadó elõretekintõ tesztnek csak egy ága volt. + </simpara> + </listitem> + <listitem> + <simpara> + 4. A bináris nullkarakter használata megengedett a tárgyszövegben, de + a mintában nem, mert a mintául szolgáló sztring nullvégû C sztringként + adódik át. A "\0" vezérlõszekvencia használható a mintában bináris + nullkarakter megjelenítésére. + </simpara> + </listitem> + <listitem> + <simpara> + 5. Nem támogatja az alábbi Perl vezérlõszekvenciákat: + \l, \u, \L, \U, \E, \Q. Valójában ezek a funkciók a Perl + sztringkezelõ részében vannak megvalósítva, és nem tartoznak annak + mintaillesztõ motorjához. + </simpara> + </listitem> + <listitem> + <simpara> + 6. A Perl \G tesztjét nem támogatja, mivel nem fontos az egyszeres minta +illesztésekben. + </simpara> + </listitem> + <listitem> + <simpara> + 7. Magától érthetõdõen PCRE nem támogatja a (?{kód}) szerkezetet. + </simpara> + </listitem> + <listitem> + <simpara> + 8. A kézikönyv írása során néhány furcsaság még van a Perl 5.002_2-ben a + begyûjtött sztringek feltöltésével kapcsolatban, ha a mintarészek + ismétlõdhetnek. Például, "aba"-ra illesztve a /^(a(b)?)+$/ mintát + $2 numerikus változó értéke "b" lesz, míg a "aabbaa"-ra illesztve + /^(aa(bb)?)+$/ -t $2 üres marad. Mindamellett /^(aa(b(b))?)+$/ -ra + módosítva a mintát $2 és $3 is beállításra kerül. Perl 5.004-ben + $2 mindkét esetben beállításra kerül, mint ahogy ez a PCRE-re is + igaz. Ha a jövõben a Perl-ben ezt egységesíteni fogják, akkor PCRE + követni fogja ezt. + </simpara> + </listitem> + <listitem> + <simpara> + 9. Másik mindeddig megoldatlan eltérés, hogy pl. /^(a)?(?(1)a|b)+$/ + minta Perl 5.002_2-ben illeszkedik a "a"-ra, míg PCRE-ben nem. Ráadásul + mind Perl-ben mind PCRE-ben /^(a)?a/ minta "a"-ra illesztése során a $1 + változó üresen marad. + </simpara> + </listitem> + <listitem> + <para> + 10. PCRE néhény bõvítést is nyújt a Perl reguláris kifejezéseinek + lehetõségeihez: + <orderedlist> + <listitem> + <simpara> + (a) Jóllehet a hátratekintõ tesztek csak rögzített hosszúságú + sztringekre illeszkedhetnek, az alternatív ágak mindegyikében különbözõ + hosszúságú sztringre illeszkedõ minta adható meg. Perl 5.005-ben minden + ágban ugyanakkorának kell lennie ennek a hossznak. + </simpara> + </listitem> + <listitem> + <simpara> + (b) Ha a <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> + be van kapcsolva, és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> nincs bekapcsolva, + akkor $ metakarakter csakis a sztring legvégére illeszkedik. + </simpara> + </listitem> + <listitem> + <simpara> + (c) Ha <link linkend="pcre.pattern.modifiers">PCRE_EXTRA</link> be van + kapcsolva, akkor bármilyen külön jelentéssel nem bíró karakter elõtti + visszaperjel hibának minõsül. + </simpara> + </listitem> + <listitem> + <simpara> + (d) Ha <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> be van + kapcsolva, akkor a kvantorok (sokszorozók) mohóságát fordítva értelmezi, + azaz, alapértelmezés szerint nem mohók, csak ha egy kérdõjel ? áll utánuk. + </simpara> + </listitem> + </orderedlist> + </para> + </listitem> + </orderedlist> + </para> + </refsect1> + + <refsect1 id="regexp.reference"> + <title>A reguláris kifejezések részletei</title> + <refsect2 id="regexp.introduction"> + <title>Bevezetés</title> + <para> + Az alábbiakban a PCRE által megvalósított reguláris kifejezések + szintaktikáját és szemantikáját adjuk meg. A reguláris kifejezések + leírása a Perl dokumentációnak része is, és néhány könyv is foglalkozik + vele, némelyik rengeteg példával. Jeffrey Friedl "Mastering Regular + Expression" c. könyve, amely az O'Reilly gondozásában jelent meg (ISBN + 1-56592-257-3) igen nagy mélységben tárgyalja a reguláris kifejezéseket. + Az itteni leírást referenciának szánjuk. + </para> + <para> + A reguláris kifejezés maga egy minta, amit a tárgyszövegre kell + illeszteni balról jobbra. A karakterek többsége maga helyett áll a + mintában, azaz csak saját magára illeszkedik a tárgyszövegben. Egy + egyszerû példán bemutatva az <literal>a gyors vörös róka</literal> minta + a tárgyszöveg azon részére illeszkedik, ami megegyezik vele (azaz ahol a + <literal>a gyors vörös róka</literal> elõfordul. + </para> + </refsect2> + <refsect2 id="regexp.reference.meta"> + <title>Metakarakterek</title> + <para> + A reguláris kifejezések ereje abban rejlik, hogy lehetõségünk van + vagylagosságot (alternatívákat) és ismétléseket megadni a mintában. + Ezeket a <emphasis>metakarakterek</emphasis> használatával lehet megadni, + amelyek nem saját maguk helyett állnak a mintában, hanem speciális + jelentéssel bírnak. + </para> + <para> + Két különbözõ típusú metakarakter létezik: + az egyik bárhol elõfordulhat a mintában, kivéve szögeletes zárójelek [] + között, és a másik, ami csak szögeletes zárójelek között azonosítható + metakarakterként. A szögletes zárójeleken kívüli metakarakterek: + <variablelist> + <varlistentry> + <term><emphasis>\</emphasis></term> + <listitem> + <simpara> + több karakterbõl álló vezérlõszekvencia kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>^</emphasis></term> + <listitem> + <simpara> + tárgyszöveg elejét (vagy sor elejét többsoros módban) jelenti + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>$</emphasis></term> + <listitem> + <simpara> + tárgyszöveg végét (vagy sor végét többsoros módban) jelenti + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>.</emphasis></term> + <listitem> + <simpara> + bármilyen karakterre illeszkedik, kivéve az újsor karaktert + (alapértelmezés szerint) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>[</emphasis></term> + <listitem> + <simpara> + karakterosztály definició kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>]</emphasis></term> + <listitem> + <simpara> + karakterosztály definició végét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>|</emphasis></term> + <listitem> + <simpara> + elágazás kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>(</emphasis></term> + <listitem> + <simpara> + részminta kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>)</emphasis></term> + <listitem> + <simpara> + részminta végét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>?</emphasis></term> + <listitem> + <simpara> + opcionálitást jelez (0 vagy 1 elõfordulást engedélyez), + vagy kibõvíti az elõtte álló ( jelentését, + és a kvantorok (sokszorozók) mohóságát befolyásolja + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>*</emphasis></term> + <listitem> + <simpara> + "0 vagy több" kvantor (sokszorozó) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>+</emphasis></term> + <listitem> + <simpara> + "1 vagy több" kvantor (sokszorozó) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>{</emphasis></term> + <listitem> + <simpara> + "min/max" kvantor (sokszorozó) kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>}</emphasis></term> + <listitem> + <simpara> + "min/max" kvantor (sokszorozó) végét jelzi + </simpara> + </listitem> + </varlistentry> + </variablelist> + + A minta szögletes zárójelek [] közötti részét karakterosztálynak hívjuk. + A karakterosztályokban engedélyezett metakarakterek a következõk: +<variablelist> + <varlistentry> + <term><emphasis>\</emphasis></term> + <listitem> + <simpara> + több karakterbõl álló vezérlõszekvencia kezdetét jelzi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>^</emphasis></term> + <listitem> + <simpara> + negálja az osztályt, kizáró / tagadó osztályt definiál, + de csak ha ez az elsõ karakter az osztályon belül + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>-</emphasis></term> + <listitem> + <simpara> + karaktertartományt jelez + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>]</emphasis></term> + <listitem> + <simpara> + lezárja a karakterosztályt + </simpara> + </listitem> + </varlistentry> + </variablelist> + A következõ fejezetek a metakarakterek használatát írják le. + </para> + </refsect2> + <refsect2 id="regexp.reference.backslash"> + <title>visszaperjel \</title> + <para> + A visszaperjel \ karakternek számos alkalmazása van. + Elõször is, ha nem alfanumerikus karakter követi, akkor annak bármilyen + különleges jelentését (metakarakterek) figyelmen kívül hagyja, és azt + mint maga helyett álló karaktert értelmezi. Ebben a minõségében mind + karakterosztályon belül mind kívül használható. + </para> + <para> + Például, ha "*" karaktert kell illeszteni, akkor "\*"-t kell írni a + mintában. Akármikor használható ez a szerkezet, akár a következõ karakter + egyébként metakarakterként lenne értelmezve, akár nem. (Egy kivétel van + lásd a ] karakternél - a fordító.) Ezért biztos módszer elõírni azt, hogy + minden nem alfanumerikus karakter maga helyett álljon, úgy, hogy + visszaperjelet (\) írunk elé. Különben ha a visszaperjelre szeretnénk + illeszteni, akkor "\\"-t kell írni. + </para> + <para> + Ha a minta <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosítóval van megadva, akkor minden olyan térközkaraktert figyelmen + kívül hagy, amely karakterosztályon kívül vagy karakterosztályon + kívüli "#" és azt követõ újsor-karakter között szerepel. Visszaperjellel + bevezetett térköz- vagy "#" karakterek a minta részét képezik. + </para> + <para> + A visszaperjel másik alkalmazása a nem nyomtatható karakterek kódolását + teszi láthatóvá a mintában. Nincs megszorítás a nem nyomtatható karakterek + megjelenésére, kivéve a mintát lezáró nullkaraktert. + Ha a minta szövegszerkesztés folyományaként áll elõ, akkor általában + könnyebb valamelyik alábbi vezérlõszekvenciát használni, mint az általuk + reprezentált karakter bináris alakját: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\a</emphasis></term> + <listitem> + <simpara> + csengõ karakter (hexadecimálisan 07) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\cx</emphasis></term> + <listitem> + <simpara> + "control-x", ahol x bármilyen karakter lehet + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\e</emphasis></term> + <listitem> + <simpara> + "escape" (hexadecimálisan 1B) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\f</emphasis></term> + <listitem> + <simpara> + lapdobás (hexadecimálisan 0C) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\n</emphasis></term> + <listitem> + <simpara> + újsor (hexadecimálisan 0A) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\r</emphasis></term> + <listitem> + <simpara> + kocsivissza (hexadecimálisan 0D) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\t</emphasis></term> + <listitem> + <simpara> + tabulátor (hexadecimálisan 09) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\xhh</emphasis></term> + <listitem> + <simpara> + hh hexadecimális kódú karakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\ddd</emphasis></term> + <listitem> + <simpara> + ddd oktális kódú karakter, vagy "hivatkozás" + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + A "<literal>\cx</literal>" feloldása precízen megfogalmazva a következõ: + ha "<literal>x</literal>" kisbetû, akkor nagybetûvé konvertálódik. Ezután + a karakter 6. bitjét (hexadecimálisan 40) invertálja. Ilyenformán + "<literal>\cz</literal>"-ból hexadecimális 1A lesz, de + "<literal>\c{</literal>"-ból hexadecimális 3B lesz, míg + "<literal>\c;</literal>"-ból hexadecimális 7B. + </para> + <para> + A "<literal>\x</literal>" után két hexadecimális számjegy kerül + beolvasásra (a betûk lehetnek kis és nagybetûk is). + </para> + <para> + A "<literal>\0</literal>" után két további oktális számjegy kerül + beolvasásra. Minden esetben - még ha kevesebb, mint két számjegy került + is megadásra - a meglevõ számjegyek lesznek felhasználva. Ekképpen + "<literal>\0\x\07</literal>" egy olyan sorozatot definiál, ahol két + bináris nullkaraktert követ egy csengõkarakter. Bizonyosodj meg affelõl, + hogy mindig van két számjegy a kezdõ 0 után, ha a következõ karakter + oktális számjegy! + </para> + <para> + A nem 0-val folytatódó visszaperjel kezelése bonyolult. Karakterosztályon + kívül PCRE ezt és a soron következõ számjegyeket tízes + számrendszerbeli számként értelmezi. Ha szám 10-nél kisebb vagy + legalább ezzel a számmal egyezõ "gyûjtõ" nyitó zárójel elõzi meg a + kifejezésben, akkor az egész sorozatot <emphasis>hivatkozás</emphasis>ként értelmezi. + Késõbb a zárójelezett részminták fejezetében részletesen tárgyaljuk, + hogyan használható is ez. + </para> + <para> + Karakterosztályon belül vagy ha a tízes számrendszerbeli szám nagyobb, + mint 9 és nincs ennyi számú "gyûjtõ" részminta, akkor PCRE újraolvassa a + visszaperjelet követõ három oktális karaktert, és egy bájtra váltja a 8 + legkisebb helyiértékû bitet. Bármely rákövetkezõ számjegy maga helyett + áll, magára illeszkedik. + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\040</emphasis></term> + <listitem> + <simpara> + egy másik módja a szóköz megadásának + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\40</emphasis></term> + <listitem> + <simpara> + ugyanaz mint elõbb, ha biztosított, hogy 40-nél kevesebb "gyûjtõ" +részminta van elõtte + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\7</emphasis></term> + <listitem> + <simpara> + mindig hivatkozásként értelmezi + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\11</emphasis></term> + <listitem> + <simpara> + hivatkozás is lehet, vagy a tabulátort írhatjuk így + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\011</emphasis></term> + <listitem> + <simpara> + mindig tabulátort jelent + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\0113</emphasis></term> + <listitem> + <simpara> + tabulátor és utána egy "3" + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\113</emphasis></term> + <listitem> + <simpara> + 113-as oktális kódú karakter ("K"), mivel hivatkozások száma nem + lehet több, mint 99 + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\377</emphasis></term> + <listitem> + <simpara> + egy olyan bájt, ami teljes egészében 1 értékû biteket tartalmaz + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\81</emphasis></term> + <listitem> + <simpara> + akár hivatkozás is lehet, vagy egy bináris nullkarakter és utána két + karakter egy "8" és egy "1" + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Figyelj arra, hogy 100-nál nagyobb oktális értékek elé nem szabad + bevezetõ 0-t írni, mert mindig csak három oktális kerül beolvasásra. + </para> + <para> + Minden sorozat, ami egy egyszerû bájtot határoz meg, karakterosztályon + belül és kívül is használható. Ráadásul karakterosztályokon belül a + "<literal>\b</literal>" szekvencia "visszatörlés" karakterként + (backspace) (hexadecimálisan 08) jelent. Ennek karakterosztályokon + kívül más jelentése van (lásd alább). + </para> + <para> + A visszaperjel harmadik alkalmazási módja általános karakterfajták + megadása: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\d</emphasis></term> + <listitem> + <simpara> + bármilyen tízes számrendszerbeli számjegy (decimális) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\D</emphasis></term> + <listitem> + <simpara> + bármilyen karakter, ami nem tízes számrendszerbeli számjegy + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\s</emphasis></term> + <listitem> + <simpara> + bármilyen térközkarakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\S</emphasis></term> + <listitem> + <simpara> + bármilyen nem térközkarakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\w</emphasis></term> + <listitem> + <simpara> + bármilyen "szóépítõ" karakter + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\W</emphasis></term> + <listitem> + <simpara> + bármilyen nem "szóépítõ" karakter + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Mindegyik szekvenciapár két diszjunkt (egymással nem átfedõ) részre + osztja a karakterek teljes halmazát. Minden karakter csakis a párok egyik + felébe tartozik. + </para> + <para> + "Szóépítõ" karakter minden betû vagy számjegy vagy aláhúzás, azaz + minden olyan karakter, amit egy Perl-típusú "<literal>szónak</literal>" + része lehet. A betûk és számjegyek értelmezése a PCRE + karaktertáblázataitól függ, amelyek változhatnak ha nyelvi beállítástól + függõen. Például, "fr" (vagy "hu" - a fordító) nyelvi beálllítás esetén + 128-nál magasabb kódú karakterek használatosak az ékezetes betûkhöz, + amelyekre illeszkedik a <literal>\w</literal>. + </para> + <para> + Ezek a karakterfajták mind karekterosztályokon belül és kívül is + alkalmazhatók. Mindegyik csak egy, a neki megfelelõ karakterre + illeszkedik. Ha az aktuális illeszkedési pont a tárgyszöveg vége, akkor + mindegyik sikertelen lesz, mert egyáltalán nincs karakter, amire + illeszteni lehetne. + </para> + <para> + A visszaperjelet végül de nem utolsósorban néhány egyszerû teszt + megadására használhatjuk. A tesztek (assertion) olyan feltételek, + amelyeknek az illesztés adott pontján kell teljesülnie anélkül, hogy a + tárgyszöbegbõl karaktereket használnának el - és így karaktereket + vennének el az illesztéstõl. Késõbb megadjuk, hogy hogyan használhatók + a részminták összetettebb tesztek megadásához. + A "visszaperjeles" tesztek: + </para> + <para> + <variablelist> + <varlistentry> + <term><emphasis>\b</emphasis></term> + <listitem> + <simpara> + szóhatár + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\B</emphasis></term> + <listitem> + <simpara> + nem szóhatár + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\A</emphasis></term> + <listitem> + <simpara> + tárgyszöveg kezdete (függetlenül többsoros üzemmódtól) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\Z</emphasis></term> + <listitem> + <simpara> + tárgyszöveg vége vagy újsor karakter a végén (függetlenül többsoros + üzemmódtól) + </simpara> + </listitem> + </varlistentry> + <varlistentry> + <term><emphasis>\z</emphasis></term> + <listitem> + <simpara> + tárgyszöveg vége (függetlenül többsoros üzemmódtól) + </simpara> + </listitem> + </varlistentry> + </variablelist> + </para> + <para> + Ezek a tesztek karakterosztályokban nem használhatók. (Figyeld meg, hogy + "<literal>\b</literal>"-nek eltérõ jelentése van karakteroszályokon + belül, nevezetesen itt a "visszatörlés" karakter helyett áll.) + </para> + <para> + A szóhatár a tárgyszöveg azon poziciója, ahol az aktuális és az azt + megelõzõ karakterek fajtája <literal>\w</literal> illetve <literal>\W</literal> vagy fordítva + (az egyik <literal>\w</literal>-re illeszkedik, míg a másik <literal>\W</literal>-re), vagy a tárgyszöveg eleje illetve + vége, ha az elsõ illetve utolsó karakter a <literal>\w</literal>-re + illeszkedik. + </para> + <para> + A <literal>\A</literal>, <literal>\Z</literal> és <literal>\z</literal> tesztek különböznek a hagyományos kalap(os ékezet) "^" és + dollárjel "$" szimbólumoktól, mert az elõbbiek minden esetben csakis a + tárgyszöveg legelejére illetve legvégére illeszkednek. Nem befolyásolja a + viselkedésüket sem <link linkend="pcre.pattern.modifiers">PCRE_NOTBOL</link> sem <link +linkend="pcre.pattern.modifiers">PCRE_NOTEOL</link> módosító. + A <literal>\Z</literal> és <literal>\z</literal> közti különbség annyi, hogy a <literal>\z</literal> csak a tárgyszöveg végére + illeszkedik, míg <literal>\Z</literal> az esetlegesen a tárgyszöveg végén lévõ újsor karakter elõtt is. + </para> + </refsect2> + <refsect2 id="regexp.reference.circudollar"> + <title>kalap(os ékezet) ^ és dollárjel $</title> + <literallayout> + Karakterosztályokon kívül az alapértelmezett illesztési + üzemmódban a kalap(os ékezet) egy olyan tesztet jelent,amely + csak akkor és csak is akkor igaz (&true;), ha a pillanatnyi + illesztési pont a tárgyszöveg kezdete. Karakterosztályokon + belül teljesen más jelentése van (lásd alább). + + A kalapnak akkor nem szükséges a minta legelején állnia, ha + több választási lehetõség is fennáll (lásd: retesz pipa + csõvezeték |), de minden választható ágban a legelsõnek kell + lennie, ha azt akarod, hogy a minta valaha is illeszkedjen. + Ha mindegyik lehetséges ág "kalappal" kezdõdik, azaz ha a + minta mindenesetben csak a tárgyszöveg elejétõl kezdve + illeszkedhet, akkor "(le)rögzített" mintáról beszélünk. + (Más módja is van, hogy egy mintát "rögzíts".) + + A dollárjel olyan tesztet jelent, amely csak akkor és csakis + akkor igaz (&true;), ha a pillanatnyi illesztési pont a + tárgyszöveg vége vagy egy újsor karakter elõtti pozició - az + alapértelmezés szerint. A dollárjelnek akkor nem szükséges a + minta legvégén állnia, ha több választási lehetõség is fennáll + (lásd: retesz pipa csõvezeték |),de minden választható ágban + - ahol szerepel - a legutolsónak kell lennie. A dollárjelnek + nincs külön jelentése karakterosztályokon belül. + + A dollárjel jelentése megváltozik és csak a tárgyszöveg + végére illeszkedik, ha a <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> módosító be van + kapcsolva a minta fordításakor / kiértékelésekor vagy az + illesztés pillanatában. Ez nem érinti a <literal>\Z</literal> tesztet. + + A kalap(os ékezet) és a dollárjel jelentését megváltoztatja + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító bekapcsolása. Ebben az esetben a + közbensõ "\n" újsorkarakterek közvetlen elõtti illetve utáni + pozicióira is illeszkednek a tárgyszöveg eleji és végi + pozición felül. Például, így a <literal>/^abc$/</literal> minta többsoros + üzemmódban illeszkedik a "def\nabc" szövegre, de egyébként + nem. Következésképpen az egysoros üzemmódban "rögzítettnek" + tekintett minták, nem "rögzítettek" többsoros üzemmódban, + mert ekkor "^"-kal kezdõdõ vagylagos ágak nem tekinthetõk + "rögzítettnek". A <link linkend="pcre.pattern.modifiers">PCRE_DOLLAR_ENDONLY</link> módosítót figyelmen kívül hagyja, ha a + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link>, módosító be van kapcsolva. + + Figyelj arra, hogy a \A, \Z és \z szekvenciák mindkét + üzemmódban használhatók a tárgyszöveg elejére illetve végére + illesztésben, és ha minden vagylagos ág \A -val kezdõdik, + akkor a minta mindig "rögzített" lesz akármi is a + <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító állapota. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.dot"> + <title>pont .</title> + <literallayout> + Karakterosztályokon kívül a pont bármelyik karakterre + illeszkedik beleértve minden nem nyomtatható karaktert is, + kivéve az újsort - alapértelmezés szerint. Ha a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + be van kapcsolva, akkor az újsor karakterre is illeszkedik. + A pont kezelése teljesen független a kalap(os ékezet) ^ és + a dollárjel $ kezelésétõl, az egyetlen közös hármukban, hogy + mindegyiknek köze van az újsor karakterhez. A pontnak nincs + speciális jelentése karakterosztályokon belül. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.squarebrackets"> + <title>Szögeletes zárójel []</title> + <literallayout> + A nyitó szögeletes zárójel egy karakterosztály kezdetét, míg + a záró párja annak végét jelzi. A bezáró zárójel önmagában + nem hordoz speciális jelentést. Ha egy ] karaktert kell a + karakterosztályon belül megadni, akkor annak vagy legelöl + kell állnia - az esetleges kalap(os ékezet) után -, vagy egy + visszaperjelet kell eléírni. + + A karakterosztályok csak a tárgyszöveg egyetlen karakterére + illeszkednek. Ha a karakterosztály legelsõ karaktere nem a + kalap(os ékezet) ^,akkor ez csak a karakterosztályba tartozó + karakterek valamelyikére illeszkedik, ha a legelsõ karakter + kalap(os ékezet) ^ , akkor pedig csak azokra, amelyek nem + elemei az osztálynak. (Ez utóbbit hívjuk tagadó vagy kizáró + karakterosztálynak - a fordító.) Ha a kalap(os ékezet) ^ + karaktert kell megadni egy karakterosztály elemeként, akkor + az nem lehet a legelsõ pozicióban, vagy visszaperjelet kell + eléírni. + + Az [aeiou] karakterosztály például minden kisbetûs ékezet + nélküli magánhangzóra illeszkedik, míg az [^aeiou] pont + ezekre nem. A kalap(os ékezet) kényelmes jelölési forma olyan + karakterosztályok megadására, ahol a kizárandó elemeket + könnyebb felsorolni. Ez nem teszt, ez karaktereket használ + el a tárgyszövegbõl, ezért a tárgyszöveg végén az illesztés + sikertelen lesz. + + Amikor a kis- és nagybetûk különbözõsége nem számít, akkor a + betûk a kis- és nagybetûs alakjukat is képviselik, tehát + ilyen esetben például [aeiou] illeszkedik az "A"-ra és az + "a"-ra is, és az [^aeiou] nem illeszkedik a "A"-ra, csak ha + a kis- és nagybetû különbözõsége számít. + + Karakterosztályokban az újsort soha nem kezelik különleges + módon, bármi is a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> módosító értéke. + A kizáró karakterosztályok mint például [^a] pedig mindig + illeszkednek az újsor karakterre. + + Az "-" elválasztójellel karaktertartományokat lehet megadni + a karakterosztályon belül. A [d-m], például, a d és m közti + bármelyik karakterre illeszkedik - d-t és m-et is beleértve. + Ha az elválasztójelet kell a karakterosztályon belül megadni, + akkor vagy egy visszaperjelet kell eléírni, vagy olyan + pozicióban kell megadni, ahol nem lehet tartományképzõként + értelmezni, jellemzõen a karakterosztály elsõ vagy utolsó + tagjaként. + + A "]" karaktert ebben a literális formában nem lehet egy + tartomány záró tagjaként használni. A [W-]46] minta például + azt jelenti, hogy a "W" és "-" karakterek valamelyikét + kövesse a "46]" sztring, ezért a "W46]" vagy "-46]" + illeszkedik a mintára. Ha azonban visszaperjelet írunk elé, + akkor a visszaperjel lesz a tartomány felsõ határa, és ekkor + "[W-\]46]" mintát egy egyszerû osztályként értelmezi, amit + három különálló karakter követ. Oktális vagy hexadecimális + ábrázolásban lehet megadni a "]"-t mint tartományt lezáró + karaktert. + + A tartományok meghatározásakor az ASCII karaktertáblázat + karakterkódjai számítanak, a karakterek helyett a numerikus + kódjaik is használhatók, például [\000-\037]. Ha kis- és + nagybetûkre nem érzékeny az illesztés és a tartomány betûket + is felölel, akkor azok mind a kis- mind a nagybetûs + alakjuknak megfelelõ karaktereket egyaránt helyettesítik, + például a [W-c] ugyanaz, mint a [][\^_`wxyzabc] , és ha a + "fr" nyelvi beállítást használjuk, akkor a [\xc8-\xcb] minta + illeszkedik minden ékezetes e illetve E karakterre. + (franciában van pár ilyen :) + + A Karakterosztályokhoz karakterfajtákat - \d, \D, \s, \S, \w + és \W -t - is hozzáadhatunk, és így a fajtába tartozó + karaterekkel bõvíthejük. A [\dABCDEF] - például - minden + hexadecimális számjegyre illeszkedik . A kalap(os ékezet)-t + a nagybetûs (tagadó) fajtákkal együtt használva kényelmesen + megadható a kisbetûs párjuknál korlátozotabb halmaz.A [^\W_] + karakterosztály minden betûre és számjegyre illeszkedik, de + az aláhúzásra nem (ami ugyancsak eleme a \w-nek). + + A \, -, a kezdõ ^ és a záró ] karakterektõl eltekintve a + nem alfanumerikus karaktereknek nincs különleges jelentésük + a karakterosztályokon belül, de nem okoz gondot, ha esetleg + visszperjel elõzi meg ezeket. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.verticalbar"> + <title>Retesz, pipa, csõvezeték |</title> + <literallayout> + A "|" karakterrel vagylagos - alternatív - mintákat lehet + megadni, pontosabban azokat választja el egymástól. Például + + gyula|sacika + + minta illeszkedik a "gyula" és a "sacika" szövegre is. + Bármennyi vagylagos / választható mintát fel lehet sorolni, + köztük az üres mintát is, ami az üres sztringre illeszkedik. + Az illesztés a mintákat balról jobbra, egymás után sorjában + veszi, és a legelsõ sikeresen illesztett lesz használva. A + részmintákban használt vagylagos ágak esetében a "sikeresen" + azt jelenti, hogy a minta fennmaradó részét is sikerül + illeszteni. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.internal-options"> + <title>Módosítók mintán belüli beállításai</title> + <literallayout> + A <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> , <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> , <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> és <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosítókat a minta belsejében is átállíthatjuk "(?" és ")" + közé írt Perl-beli betûjelzéseikkel. Ezek a betûk: + + i = <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> + m = <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link> + s = <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + x = <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + + A "(?im)" bekapcsolja a többsoros és a "kis-nagybetû mindegy" + üzemmódot. Kikapcsolni az egyes beállításokat az eléjük írt + kötõjellel lehet, valamint a módosítók együttes állítása is + megengedett,például a (?im-sx) bekapcsolja a <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link>-t + és a <link linkend="pcre.pattern.modifiers">PCRE_MULTILINE</link>-t valamint kikapcsolja <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link>-t + és <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link>-t. + Ha egy betûjelzés a kötõjel mindkét oldalán szerepel, akkor + a módosító ki lesz kapcsolva. + + Ezeknek a beállításoknak az érvényességi köre attól függ, + hogy a mintán belül hol fordulnak elõ. Minden részmintán + kívüli beállítás olyan, mintha az illesztés kezdetén lett + volna megadva, ezért a következõ minták tökéletesen ugyanúgy + mûködnek: + + (?i)abc + a(?i)bc + ab(?i)c + abc(?i) + + , ami ugyanaz, mintha az "abc" mintát <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> módosítóval + adtuk volna meg. Másszóval a legfelsõ szintû beálllítások az + egész mintára érvényesek, hacsak egy részmintában felül nem + bírálod azokat. Ha a módosítónak több beállítása is szerepel + a legfelsõ szinten, akkor a jobbról legutolsó fog érvényre + jutni. + + Ha részmintán belül történik módosítóváltoztatás, akkor a + hatás különbözõ (Perl 5.005 viselkedésbeli változása). + A részmintán belüli módosító-állítás csak a részminta + hátramaradó részét érinti, ezért + + (a(?i)b)c + + minta csak az "abc" és "aBc" szövegekre illeszkedik feltéve, + hogy <link linkend="pcre.pattern.modifiers">PCRE_CASELESS</link> módosítót nem adtuk meg. Ez azt + jelenti, hogy a minta különbözõ helyein a módosítók más és + más értékeit lehet beállítani. Bármilyen változtatás egy + vagylagos (választható) ágban a következõ ágakra is hatással + van ugyanabban a részmintában, például + + (a(?i)b|c) + + minta illeszkedik az "ab", "aB", "c" és "C" szövegekre még + akkor is, ha "C"-re illeszkedve az nem is az elsõ ágra esett + a választás, ahol a módosító be lett állítva. Ennek az az + oka, hogy a módosító beállítások hatásai már a kifejezés + fordításakor / kiértékelésekor rögzülnek, máskülönben néha + nagyon furcsa viselkedést tapasztalhatnánk. + + A PCRE-specifikus <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> és <link linkend="pcre.pattern.modifiers">PCRE_EXTRA</link> módosítókat a + Perl-kompatibilisekhez hasonló módon állíthatók, az U és X + karakterek használatával.A (?X) beállítás különleges, mert - + még a legfelsõ szinten is - mindig hamarabb kell szerepelnie + a mintában, mint a további kapcsolóknak. Legjobb a minta + legelejére rakni. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.subpatterns"> + <title>Részminták</title> + <literallayout> + A részminták egymásba ágyazhatók, és kerek zárójel fogja + közre õket. A minta egy darabját részmintaként szerepeltetni + két dolgot jelent: + + 1. Elágazási lehetõségek helyét jelöli ki (csoportosítás): + + szél(toló|kakas|) + + minta illeszkedik a "szél", "széltoló" vagy "szélkakas" + szavak egyikére. Zárójel nélkül a "széltoló"-ra, a "kakas"-ra + vagy az üres sztringre illeszkedne. + + 2. A részmintát "gyûjtõ" részmintává változtatja. Ha a + teljes mintát sikerült illeszteni, akkor a tárgyszöveg azon + részei, amelyek a "gyûjtõ" részmintákra illeszkedtek, + a <function>pcre_exec</function> függvény <emphasis>ovector</emphasis> paraméterében a hívó + függvénynek lesznek átadva. + A kerek nyitó zárójelek számozása balról jobbra 1-tõl kezdve + történik, és "gyûjtõ" részminták (sor)számát adják. + + Például, ha az "a vörös király" szöveget illesztjük + + a ((vörös|sápadt) (király|királynõ)) + + mintára, akkor a megtalált / begyûjtött szövegrészek : + 1. "vörös király", 2. "vörös" és 3. "király". + + Az a tény, hogy a kerek zárójelnek kettõs szerepe van, nem + minden esetben hasznos. Sokszor elõfordulhat, hogy csak a + csoportosító funkcióra van szükségünk "begyûjtés" nélkül. + Erre szolgál a nyitó zárójel után irható "?:" karaktersorozat + , mert ekkor a részminta nem gyûjti be / tárolja el a + ráilleszkedõ szövegrészt, és nem is számít bele a következõ + "gyûjtõ" részminták sorszámozásába. Az elõzõ példánál maradva + "a sápadt királynõ" + + a ((?:vörös|sápadt) (király|királynõ)) + + mintára illesztve a megtalált / begyûjtött részminták : + 1. "sápadt királynõ" és a 2. "királynõ". + A "gyûjtõ" részminták száma legfeljebb 99 lehet,és az összes + részminta "gyûjtõ" és "nem-gyûjtõ" együtt legfeljebb 200. + + Ha egy nem-gyûjtõ részminta elején módosítókat kell állítani, + akkor kényelmes rövidítésként használható, hogy a módosítók + betûjelei a "?" és a ":" közé írhatók. Ebbõl adódóan az + alábbi két minta + + (?i:szombat|szerda) + (?:(?i)szombat|szerda) + + pontosan ugyanazokra a sztringekre illeszkedik. + Mivel a vagylagos / választható ágak próbálgatása balról + jobbra történik, és a módosító hatása addig él, amíg a + részminta le nem zárul, az egyik ágban beállított módosító + hatással van a következõ ágra is, ezért a fenti minta + illeszkedik a "SZERDA" és "Szombat" szavakra is. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.repetition"> + <title>ISMÉTLÉSEK</title> + <literallayout> + Az ismétléseket kvantorokkal (sokszorozókkal) lehet megadni + + egyszerû karakter (esetleg visszaperjellel bevezetve), + . metakarakter, + karakterosztály, + hivatkozás (következõ szakasz) vagy + zárójeles részminta (nem teszt) + + után. + + Az általános ismétlõ kvantor (sokszorozó) - kapcsos + zárójelben vesszõvel elválasztva - írja elõ azt minimális és + maximális elõfordulási számot, ahányszor a mintát illeszteni + kell illetve lehet. Ezeknek 65536-nél kisebbnek kell lenniük, + és az elsõ legfeljebb annyi lehet, mint a második. Például a + + z{2,4} + + minta illeszkedik a "zz", "zzz" vagy "zzzz" szövegekre. + Az egymagában álló záró kapcsos zárójel nem bír speciális + jelentéssel. Ha a második számot nem adjuk meg, de a vesszõ + szerepel, akkor az illesztésnek nincs felsõ határa, de ha a + vesszõt is elhagyjuk, akkor a kvantor (sokszorozó) pontosan + a megadott számú illesztést engedi csak. Ekképpen: + + [aáeéiíoóöõuúüû]{3,} + + legalább 3 egymást követõ magánhangzóra illeszkedik, de akár + többre is, míg a + + \d{8} + + csakis 8 darab számjegyre. Ha a nyitó kapcsos zárójel olyan + helyen szerepel, ahol kvantor nem szerepelhet, akkor betû + szerint lesz figyelembe véve, maga helyett áll a mintában. A + {,6} például nem kvantor (sokszorozó), hanem egy négy + karakteres minta betû szerint értelmezve. + + A {0} kvantor (sokszorozó) megengedett, és hatása olyan, + mintha az elõtte álló mintaelem és maga a kvantor nem is + szerepelne. + + Kényelmi és történelmi okokból három, gyakori kvantornak + létezik rövidítése is: + + * egyenlõ {0,} - val + + egyenlõ {1,} - val + ? egyenlõ {0,1} - val + + Végtelen ciklusokat is lehet definiálni úgy, ha egy olyan + részmintát sokszorozzunk felsõhatár nélkül, amelynek nem + muszáj illeszkednie egyetlen karakterre sem, például: + + (a?)* + + Perl és PCRE korábbi verziói hibát jeleztek az ilyen minták + kiértékelésekor / fordításakor. Azonban vannak esetek,amikor + ezek a minták is hasznosak lehetnek, ezért ezeket a mintákat + most már elfogadják, de ha a részminták ismételten nem + illeszkednek egy karakterre sem, a ciklust erõszakkal + megszakítják. + + + Alapértelmezés szerint a kvantorok (sokszorozók) "mohók" , + azaz amennyi karakterre csak illeszteni tudnak, azt mind + elhasználják a tárgyszövegbõl - a felsõ ismétlési határ + figyelembe vétele mellett - anélkül,hogy a minta többi része + sikertelenül illeszkedne. + A klasszikus példa, ahol ez problémát okoz, a C forráskódok + megjegyzéseire illeszkedõ kifejezés. Ezek a megjegyzések nem + egymásba ágyazhatók, /* és */ közé írt tetszõleges szövegek, + amelyekben szerepelhet a * és / jel is (nem egymás mellett). + + /\*.*\*/ + + mintát a + + /* elsõ megjegyzés */ c_code(); /* második megjegyzés */ + + C forrásrészletre illesztve kudarcot vallunk - köszönhetõen + a .* elem mohóságának. (Az illesztés sikeres, csak nem arra + való, amire szerettük volna - a fordító). + + Ha azonban a kvantort (sokszorozót) kérdõjel ? követi, akkor + ez megszünteti annak mohóságát, és csak a lehetõ legkevesebb + illesztést engedi, ezért a + + /\*.*?\*/ + + minta az, ami C forráskódú megjegyzésekre való. A különbözõ + kvantorok (sokszorozók) jelentése egyébként nem változik + ettõl, csak az elõnyben részesített illeszkedési számuk. A + kérdõjelnek ez a szerepe nem összetévesztendõ a feltételes + kvantorral (sokszorozóval), mert a kérdõjelet kétféleképpen + és néha megkettõzve használjuk, például: + + \d??\d + + egy számjegyre illeszkedik leginkább, és csak akkor kettõre, + ha a minta maradék része másképp nem illeszkedne. + + Ha a <link linkend="pcre.pattern.modifiers">PCRE_UNGREEDY</link> módosító be van kapcsolva, akkor + a kvantorok (sokszorozók) alapértelmezés szerint nem mohók + (szerények :), csak ha egykérdõjel követi õket. Másszóval, a + kérdõjel átállítja a kvantorok alapértelmezés szerinti + viselkedését. + + Amikor egy zárójelezett részminta egynél többször vagy + legfeljebb meghatározott számban ismétlõdhet, akkor a + kiértékelt minta több memóriát foglal el a minimális és + maximális elõfordulással arányosan. + + Ha a minta .* -val vagy .{0,} -val kezdõdik és a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + módosító (Perl-beli /s-nek megfelelõje) be van kapcsolva, és + így a . illeszkedik az újsor karakterre is, akkor a minta + hallgatólagosan "rögzített" lesz, mert bármi is következik + utána, az a tárgyszöveg minden karakterpoziciójára "rá lesz + próbálva", így nincs az elsõn kívül más karakterpozició, + ahonnan az egész illesztés újrakezdõdhetne. PCRE az ilyen + mintákat úgy tekinti, mintha \A-val kezdõdne. Azokban az + esetekben, amikor tudjuk, hogy a tárgyszöveg nem tartalmaz + újsorkaraktereket és a minta .* -gal kezdõdik, érdemes + beállítani a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> módosítót vagy ^ -t használni + a "rögzítés" eléréséhez, hogy ezt az optimalizálást + kieszközöljük. + + Ha a "(be)gyûjtõ" részminta az illesztés során ismételten + felhasználásra kerül, akkor a begyûjtött / megtalált szöveg- + rész az utolsó ismétlésben illeszkedõ rész lesz. Például a + + (csori[keat]{3}\s*)+ + + minta a "csorikea csoriaet" történõ illesztése után a + begyûjtött / megtalált szövegrész "csoriaet" lesz. Egymásba + ágyazott részminták esetén a begyûjtött érték lehet, hogy az + elõzõ lépésben lett beállítva, például: + + /(a|(b))+/ + + illesztve a "aba" -ra a második begyûjtött szövegrész a "b". + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.back-references"> + <title>HIVATKOZÁSOK</title> + <literallayout> + Karakterosztályon kívül visszaperjelet követõ számjegy(ek) a + mintában korábban elõforduló "gyûjtõ" részmintára történõ + hivatkozásnak minõsül(nek), ha a számnak megfelelõ "gyûjtõ" + részminta nyitó kerek-zárójele ( elõfordult már a mintában. + + Ha azonban ez a tízes számrendszerbeli szám 10-nél kisebb, + akkor mindig hivatkozásnak minõsül, s csak akkor okoz hibát, + ha nincs ennyi "gyûjtõ" részminta megnyitva az egész mintán + belül. Magyarán a 10-nél kisebb sorszámú kerek nyitó + zárójeleknek nem kell a hivatkozás elõtt, a mintában ettõl + balra állniuk. Olvasd el a "visszaperjel \" szakaszt, ahol + részletesen olvashatsz arról, hogy miképpen kezeli a PCRE a + visszaperjel után álló számjegyeket. + + A hivatkozások az általuk megcímzett "gyûjtõ" részmintákra + ténylegesen illeszkedõ szövegrészeket testesítik meg, és nem + azokat, amelyre illeszkedthetek volna egyébként. Mindjárt + megvilágítjuk egy példán keresztül: + + (ért|kegy) és \1elem + + illeszkedik a "kegy és kegyelem"-re és "ért és értelem"-re, + de nem illeszkedik az "ért és kegyelem"-re. + Ha a kis- és nagybetûk különbsége érvényben van a hivatkozás pillanatában, akkor számít a betûalakok különbsége. Például + + ((?i)rah)\s+\1 + + minta illeszkedik a "rah rah" és "RAH RAH" szövegekre, de a + "RAH rah" -ra még akkor sem, ha az eredeti "gyûjtõ" + részmintában a kis- és nagybetûk különbsége nem számított. + + Egy részmintára több hivatkozás is utalhat. Ha a részminta + ténylegesen nem lett felhasználva az illesztés során, akkor + bármilyen hivatkozás rá hibát jelent. Például + + (a|(bc))\2 + + minta mindig hibázik, ha az illesztés "a"-val kezdõdött és + nem "bc"-vel.Mivel legfeljebb 99 hivatkozás lehet egy mintán + belül, minden visszaperjel után álló számjegy egy lehetséges + hivatkozás részét képezheti. Ha a mintát számjeggyel + kellene folytatni, akkor a hivatkozás végét valamilyen + elválasztókarakterrel kell jelezni. Ha <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> módosító + be van kapcsolva, akkor ez bármilyen térközkarakter lehet, + egyébként egy üres megjegyzés is megfelel. + + Azok a hivatkozások, amelyek magára a hivatkozást tartalmazó + részmintára utalnak,a részminta elsõ illesztésekor hibáznak, + ezért például (a\1) soha nem illeszkedik semmire. Azonban az + ilyen hivatkozások is értelmet nyerhetnek, például az alábbi + minta + + (a|b\1)+ + + illeszkedik a csupa "a"-ból álló és az "aba", "ababaa" s + ehhez hasonló sorozatokra. A részminta illesztés minden + iterációjában a hivatkozás az elõzõ iterációnak megfelelõ + karaktersorozatra utal. Azért, hogy ez mûködjön, a mintának + olyannak kell lennie, hogy az elsõ lépésben nem kelljen a + hivatkozásnak illeszkednie.Ez vagylagos ágak vagy elhagyható + - minimálisan 0 ismétlést elõíró - kvantor (sokszorozó) + használatával megoldható. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.assertions"> + <title>TESZTEK FELTÉTELEK</title> + <literallayout> + Angolul "assertion"-nek nevezett szerkezet olyan tesztet + vagy feltételt jelent, ami a pillanatnyi illesztési pozició + elõtti vagy utáni karakterekre vonatkozik, de ténylegesen + nem használ el karaktereket a tárgyszövegbõl az illesztés + elõl, csak ellenõrzi egy feltétel fennállását. Az egyszerû + teszteket - \b, \B, \A, \Z, \z, ^ és $ - már tárgyaltuk. + Az ennél bonyolultabbakat részmintaként kell megadni.Kétféle + teszt van: az elõretekintõ, ami a pillanatnyi pozició utáni + karaktereket vizsgálja és a hátratekintõ, ami az az + elõttieket. + + A teszt részmintája a szokásos módon illeszkedik, attól + eltekintve, hogy a pillanatnyi illesztési poziciót nem + változtatja meg. Az elõretekintõ tesztek "(?=" vagy tagadó + feltétel esetén "(?!" sorozattal kezdõdnek, például + + \w+(?=;) + + illeszkedik minden szóra, amelyet pontosvesszõ követ, de a + pontosvesszõ nem szerepel az illeszkedésben, és az + + ize(?!bigyo) + + illeszkedik a "ize" minden olyan elõfordulására, amit nem a + "bigyo" követ. Nyilvánvaló, hogy egy hasonló minta + + (?!ize)bigyo + + nem azokat a "bigyo"-kat találja meg, amelyek elõtt nem "ize" + van; hanem minden "bigyo"-t megtalál, mert a (?!ize) teszt + mindig igaz, hiszen az utána jövõ három karakter tényleg nem + "ize", hanem "bigy" (tesztként nem változik a pillanatnyi + illesztési pozició - a fordító). Ahhoz, hogy a kívánt hatást + érjük el a hátratekintõ tesztre van szükségünk. + + A hátratekintõ tesztek (?<= vagy tagadó feltétel esetén + a (?<! sorozattal kezdõdnek, például + + (?<!ize)bigyo + + azokat a "bigyo"-kat találja meg, amelyek elõtt nincs "ize". + A hátratekintõ tesztek csak rögzített hosszúságúak lehetnek. + Ha azonban több alternatívát adunk meg a teszten belül, + a különbözõ ágaknak lehet eltérõ a hossza, ilyenformán + + (?<=tulok|szamár) + + megengedett, ellentétben a + + (?<!kutyus(ok)?|macsk(ák)?) + + mintával, amely kiértékelés / fordítás során hibát okoz. + Az eltérõ hosszúságú ágtesztek a hátratekintõ tesztek + legfelsõ szintjén megengedettek. Ez PCRE bõvítés a Perl + 5.005-höz képest,ahol minden ágtesztnek azonos hosszúságúnak + kell lennie. A + + (?<=ab(c|de)) + + mintához hasonló nem megengedett, mert a legfelsõ szinten + levõ egyetlen ág két különbözõ hosszúságú szövegre is + illeszkedhet, de átírható, hogy a vagylagosságot a felsõ + szintre emeljük: + + (?<=abc|abde) + + A hátratekintõ tesztek megvalósítása a következõ: minden + ágra a pillanatnyi illesztési pozició átmenetileg hátrébb + kerül az ágtesztnek megfelelõ számú karakterrel és ezután + illeszteni próbál. Ha nincs elég karakter a visszalépéshez, + az illesztés sikertelen lesz. A hátratekintõ tesztek az + egyszeri részmintákkal együtt különösen hasznosak lehetnek + a szöveg végi illeszkedéseknél, az "Egyszeri részminták" c. + szakasz végén található erre példa. + + Számos különbözõ fajtájú teszt állhat egymás után, például: + + (?<=\d{3})(?<!999)ize + + minta azokra az "ize"-kre illeszkedik, ami elõtt 3 számjegy + áll, amely nem a "999". Figyelj arra, hogy minden teszt + egymástól függetlenül, ugyanabban az illesztési pozicóban + kerül kiértékelésre. Elõször azt ellenõrzi, hogy a megelõzõ + három karakter számjegy-e és utána azt, hogy ezek nem a + "999"-t adják.Ez a minta nem azokra az "ize"-kre illeszkedik, + amelyek elõtt hat karakter áll: három számjegy és másik + három, ami nem a "999", példaképpen nem illeszkedik a + "123abcize" szövegre. Az a minta, ami ezt tudja a következõ: + + (?<=\d{3}...)(?<!999)ize + + Ebben az esetben az elsõ teszt a megelõzõ hat karaktert nézi, + és azt vizsgálja, hogy az elsõ három számjegy-e, ezután a + második feltétel a maradék három karaktert nézi, hogy azok + nem a "999" sorozat. A tesztek egymásba ágyazhatók bármilyen + komibinációban. Például a + + (?<=(?<!ize)bigyo)figyula + + arra a "figyula"-ra illeszkedik, amit egy "bigyo" elõz meg, + ami elõtt nem áll "ize". Miközben + + (?<=\d{3}(?!999)...)ize + + egy másik minta az olyan "ize"-kre, amelyek elõtt három + számjegy s ezután három olyan karakter áll, amely nem "999". + + A teszt-minták nem "gyûjtõ" részminták, és nem ismételhetõk, + hiszen nincs sok értelme ugyanazt többször tesztelni. + Ha bármilyen teszt "gyûjtõ" részmintát tartalmaz, akkor + ezek a részminták is beleszámítanak a "gyûjtõ" részminták + számozásába, azonban csak pozitív tesztekre lesz végrehajtva + a megtalált szövegrész "begyûjtése", mert tagadó tesztek + esetén ennek nincs értelme. + + A tesztek beleszámítanak a zárójelezett részmintákra + vonatkozó 200-as felsõ korlátba. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.onlyonce"> + <title>Egyszeri részminták</title> + <literallayout> + A mind a maximalizáló (mohó?) mind a minimalizáló (szerény?) + ismétlés esetén a következõ részek illesztésének a + sikertelensége általában az ismételt elem újbóli + kiértékelését eredményezi, hogy eltérõ számú ismétléssel + vajon a minta maradéka illeszkedik-e. Néhány esetben hasznos + ezt megelõzni akár a mintaillesztés viselkedésének + megváltoztatásával, vagy hagyni, hogy az illesztés hamarabb + elbukjon, mint egyébként, ha a minta készítõje (szóval te :) tudja, hogy nincs értelme folytatni. + + Nézzük a következõ példát, ahol a \d+ize mintát a + + 123456bigyo + + szövegre illesztjük. + Miután 6 számjeggyel végzett,az illesztés elbukik az "ize"-n + . Ekkor a szokásos lépés, hogy megpróbálja újból 5 majd 4 és + - és így tovább - eggyel kevesebb számjegyet illeszteni a + "\d+"-re , amíg végül minden lehetõséget kimerítve az + illesztés elbukik. Az egyszeri részminták azt a lehetõséget + biztosítják nekünk, hogy ha egyszer a minta egy darabja + illeszkedett, akkor az ne legyen újra és újra kiértékelve a + fenti módon, hanem az illesztés fejezõdjön be azonnal, ha az + "ize"-t nem tudja illeszteni mar az elso alkalommal. Ennek a + jelölésére egy speciális zárójelezés szolgál (?>) + + (?>\d+)bigyo + + Ez a zárójelféle lezárja a közrefogott részmintát, ha az + egyszer már illeszkedett,és az illesztés késõbbi sikertelen + szakaszában megakadályozza, hogy az illesztés visszalépjen + ebbe a részbe. Emellett azonban az elõzõ elemekre a + visszalépegetés a szokásos módon történik. +<!--Backtracking past it to previous items, however, works as normal.--> + + Másfajta leírása, hogy ez a fajta részminta úgy illeszkedik + a szövegre, mint ahogy egy, a pillanatnyi illesztési ponthoz + rögzített, de az eredetivel teljesen megegyezõ, önálló minta + lenne. + + Az egyszeri részminták nem "gyûjtõ" részminták. Egyszerû + esetekben egy maximalizált ismétlésnek tekinthetõ, amely + minden lehetõt elnyel - ahogy a fenti példában. Miközben + tehát a \d+ és a \d+? is annyi karaktert készül elnyelni, + hogy a minta maradék része is illeszkedni tudjon, addig a + (?>\d+) csakis a teljes számjegy sorozatra illeszkedik. + + Ez a szerkezet egymásba ágyazható, és természetesen + tartalmazhat tetszõlegesen bonyolult részmintákat is. + + Az egyszeri részminták a hátratekintõ tesztekkel közösen + hatékony szövegvégére illeszkedõ mintát képesek megadni. + Nézzük a következõ mintát + + abcd$ + + egy hosszú, nem illeszkedõ szövegre alkalmazva. Mivel az + illesztés balról jobbra történik, PCRE a tárgyszöveg minden + "a" betûjét végignézi, és megvizsgálja, hogy onnantól a + minta többi része illeszkedik-e. Ha a mintát így adjuk meg: + + ^.*abcd$ + + akkor a kezdõ .* elõször a teljes szövegre illeszkedik, de + mikor a minta maradéka elbukik - hiszen nem következik + semmilyen "a" betû -, az algoritmus visszalép, hogy az + utolsó karakter kivételével mindent elnyeljen, majd az + utolsó két karakter kivételével, stb. Az "a" megkeresése + mégegyszer lefedi az egész szöveget - most jobbról balról -, + ez sem jobb. Ha azonban a mintát az alábbi alakra hozzuk + + ^(?>.*)(?<=abcd) + + az eljárás nem tud visszalépni .* elemre, csak az egész + szövegre tud illeszkedni a minta. A soron következõ + hátratekintõ teszt pedig az utolsó négy karaktert ellenõrzi. + Ha a teszt sikertelen, akkor az illesztés nyomban elbukik. + Hosszú szövegek esetén ez a megközelítés jelentõs - mérhetõ + - különbséget jelent a feldolgozási idõben. + + A korlátlan ismétlésû részmintákat tartalmazó mintákban, + amelyek maguk is korlátlan számban ismétlõdhetnek, az + egyszeri részmintával akadályozható meg egyedül az, hogy + néhány sikertelen illesztés valóban hosszú ideig tartson. A + + (\D+|<\d+>)*[!?] + + minta azokra a szövegekre illeszkedik, amelyek korlátlan + számú nem számjegy karakterek vagy <> közé írt számjegyek + sorozatából és egy !-bõl vagy ?-bõl állnak. Ha illeszkedik, + az gyorsan kiderül. Ám ha az + + aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa + + szövegre próbáljuk illeszteni, akkor sok idõt vesz igénybe, + mire "értesülünk a kudarcról". Ez azért van, mert a szöveget + nagyon sokféleképpen lehet feldarabolni két ismétlés között + és mindet végig kell próbálni. (A példában azért szerepelt + [!?] a minta végén egy egyszerû karakter helyett, mert Perl + és PCRE is rendelkezik egy beépített optimalizálással, amely + lehetõvé teszi a sikertelenség korai jelzését, mert + megjegyzik az utolsó illesztendõ karaktert és korán + jeleznek, ha az nincs benne a tárgyszövegben.) + Ha a mintát a következõképp módosítjuk: + + ((?>\D+)|<\d+>)*[!?] + + akkor a nem számjegyekbõl álló sorozatot nem lehet széttörni + és hamar kiderül, hogy nem az illesztés nem sikerült. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.conditional"> + <title>Feltételes részminták</title> + <literallayout> + Lehetõség van arra, hogy egy teszt (assertion) eredményétõl + vagy egy elõzõ "gyûjtõ" részminta illeszkedésétõl függõen + más-más részmintával folytatódjon az illesztés. A feltételes + részminták két alakja: + + (?(feltétel)igen-minta) + (?(feltétel)igen-minta|nem-minta) + + Ha a feltétel teljesül, az "igen-minta" lesz illesztve, + egyébként a "nem-minta", ha megadtunk ilyet. Ha 2-nél több + választható részmintát adtunk meg, akkor az a kiértkelés + - fordítás során hibát okoz. + + Kétfajta feltételt lehet megadni.Ha a kerek zárójelek között + csak számjegyek szerepelnek, akkor ezt egy hivatkozásként + értelmezve a feltétel abban az esetben teljesül, ha a + hivatkozott "gyûjtõ" részminta elõzõleg már illeszkedett a + szöveg valamely részére. Nézzük a következõ mintát, amelyben + a térközök nem számítanak, csak az olvashatóságot és a + könnyebb tárgyalást szolgálják. + (feltételezzük, hogy a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> be van + kapcsolva): + + ( \( )? [^()]+ (?(1) \) ) + + A minta elsõ része egy nem kötelezõ kerek nyitó zárójelre + illeszkedik, és ha ez a karakter szerepel, akkor az elsõ + begyûjtött - megtalált szövegrész (\1 vagy $1 numerikus + változó) ezt fogja tartlamazni. A minta második része a nem + kerek zárójelekre illeszkedik. A harmadik részben található + a feltételes részminta, ami azt teszteli, hogy az elsõ + részben a nyitózárójel illeszkedett-e vagy sem. Ha igen, + azaz ha a tárgyszöveg nyitó zárójellel kezdõdött, akkor az + "igen-részminta" érvényre jut, és a bezáró kerek zárójel már + kötelezõ lesz, egyébként - mivel nincs megadva "nem-minta" - + semminek nem kell illeszkednie. Magyarán ez a minta az + elhagyható zárójelek közé fogott zárójeleket nem tartalmazó + karaktersorozatra illeszkedik. + + Ha a feltételrészben nem csak számjegyek vannak, akkor annak + kötelezõen egy tesztnek (assertion) kell lennie. Ez lehet + akár elõre- vagy hátratekintõ, állító vagy tagadó felétel + is. Tekintsünk most egy, két választható mintából álló + példát, ahol a térközök szintén nem számítanak: + + (?(?=[^a-z]*[a-z]) + \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) + + (Elsõ sorban a tesztfeltétel, + a másodikban a két választható minta.) + A feltétel olyan elõretekintõ teszt, ami azt vizsgálja, hogy + egy betû elõtt elhagyható nem-betû karaktersorozat áll, azaz + legalább egy betû jelenlétét vizsgálja. Ha ez a betû jelen + van, akkor a tárgyszöveg az elsõ mintára illeszkedik, míg + egyébként a másodikra. Ez a minta vagy a "dd-aaa-dd" vagy a + "dd-dd-dd" alakú szövegekre illeszkedik, ahol "aaa" három + betût, "dd" pedig két számjegyet jelez. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.comments"> + <title>Megjegyzések</title> + <literallayout> + A (?# karartersorozat megjegyzések kezdetét jelzi a mintán + belül, amely a következõ bezáró kerek zárójelig tart. A + megjegyzéseket nem lehet egymásba ágyazni, és a bennük + elõforduló karakterek nem játszanak semmilyen szerepet a + mintaillesztés során. + + Ha a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> módosító be van kapcsolva, akkor + karakterosztályon kívüli visszaperjel nélküli # karakter + "egy soros" megjegyzést vezet be, amely a legközelebbi újsor + karakterig tart. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.recursive"> + <title>Rekurzív (önhivatkozó) minták</title> + <literallayout> + + Nézzük az egymásba ágyazható zárójeles kifejezésekre + illeszkedõ minta problémáját. Rekurzió használata nélkül a + legtöbb, amit tehetünk, hogy rögzített számú egymásba + ágyazhatóságot kezelõ mintát használunk. Nem megoldható a + tetszõleges mélységû egymásbaágyazhatóság. + Perl 5.6 kísérleti jelleggel biztosítja a lehetõséget a + reguláris kifejezések rekurzív bejárására (több egyéb + mellett). A különleges (?R) elem jelenti a meghatározott + önhivatkozási pontot. + A PCRE minta, amely megoldja a zárójelezett szövegek + problémáját (feltéve, hogy a <link linkend="pcre.pattern.modifiers">PCRE_EXTENDED</link> + módosító be van kapcsolva, tehát a térközök nem részei a + mintának) a következõ: + + \( ( (?>[^()]+) | (?R) )* \) + + Elõször egy nyitó zárójelre illeszkedik, ezután tetszõleges + hosszúságú karakterresorozatra, amely vagy nem tartalmaz + zárójeleket, vagy rekurzívan az egész mintára illeszkedik (a + zárójelezett szövegekre). Végül a bezáró zárójel következik. + + Ez a sajátságos minta korlátlan számú, egymásba ágyazott + ismétlést takar, ezért a zárójel nélküli szövegrészre + illesztésnél az egyszeri részminta használata nagyon fontos, + kiváltképp ha nem illeszkedõ tárgyszövegre alkalmazzuk. Ha például a + + (aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa() + + szövegre próbáljuk a mintát, akkor nagyon hamar megkapjuk az + eredményt. Ha nem használnánk az egyszeri részmintát, akkor + az illesztés nagyon sokáig tartana, mert rengeteg különbözõ + módon lehet a tárgyszöveget felszeletelni a * és + kvantorok + (sokszorozók) között, és minden lehetõséget ki kell + próbálni, mire az illesztést végleg sikertelennek lehet + minõsíteni. + + A "gyûjtõ" részminták által begyûjtött szövegek a rekurzió + során a legutoljára illesztett szövegrészek.A fenti mintát a + + (ab(cd)ef) + + szövegre alkalmazva a "begyûjtött" / megtalált rész az "ef" + lesz, amely a felsõ szinten az utolsó felvett érték. Ha + további zárójeleket helyezünk el a mintában ekképpen: + + \( ( ( (?>[^()]+) | (?R) )* ) \) + ^ ^ + ^ ^ + , akkor a "ab(cd)ef" szöveg lesz legkülsõ "gyûjtõ" zárójel + értéke. Ha 15-nél több "gyûjtõ" zárójel van a mintában, + akkor PCRE tartalék memóriát foglal le, hogy az adatokat itt + tárolja a rekurzió alatt (pcre_malloc-kal foglalja le, és a pcre_free-vel szabadítja fel azután.) Ha nem lehet több + memóriához hozzájutni, akkor csak az elsõ 15 "gyûjtõ" + zárójelnek menti el az adatait, minthogy lehetetlen "nincs + elég memória" hibaüzenetet kiadni a rekurzión belül. + </literallayout> + </refsect2> + <refsect2 id="regexp.reference.performances"> + <title>Teljesítmény</title> + <literallayout> + Bizonyos minták sokkal hatékonyabbak, mint mások, például + [aáeéiíoóöõuúüû] karakterosztály hatékonyabb, mint ugyanezt + választható mintákkal (a|á|e|é|i|í|o|ó|ö|õ|u|ú|ü|û) megoldani. Általában a legegyszerûbb szerkezet, amely a + kívánt viselkedést biztosítja rendszerint a leghatékonyabb. + Jeffrey Friedl könyve rengeteg példát tartalmaz, hogyan kell + reguláris kifejezéseket optimalizálni a hatékony végrehajtáshoz. + + Ha a minta .* -gal kezdõdik, és a <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> módosító + be van kapcsolva, akkor PCRE a mintát hallagtólagosan + "rögzíti", mivel az csak a tárgyszöveg elejére illeszkedhet. + Ha ez a módosító nincs beállítva, akkor nem élhet ilyen + optimalizálással, mivel a . metakarakter nem illeszkedik az + újsorkarakterre, ezért elõfordulhat, hogy a mintát minden + egyes újsortól illeszteni kell, nem csak a szöveg elejére. A + + (.*) második + + minta úgy illeszkedik az "elsõ\nés második" szövegre (ahol a + \n az újsort testesíti meg), hogy az elsõ "begyûjtött" + szövegrész az "és" lesz. Ehhez a PCRE-nek minden újsor után + újból meg kell próbálni az illesztést. + + Ha az ilyesfajta mintákat olyan szövegekre alkalmazod, + amelyekben nincsenek sortörések (újsorkarakterek), akkor a + legjobb teljesítmény a + <link linkend="pcre.pattern.modifiers">PCRE_DOTALL</link> + módosító beállításával + vagy a "rögzítés" egyértelmû megadásával lehetséges: ^.* . Ez megkíméli PCRE-t, hogy végignézze a tárgyszöveget + újsorkaraktert keresve, ahonnan az illesztést újrakezdheti. + + Vigyázz azokkal a mintákkal, amelyek egymásba ágyazott + határozatlan számú ismétlést tartalmaznak. Ezek a minták sok + idõt vesznek el, ha nem illeszkedõ szövegre kell alkalmazni õket. Nézzük a + + (a+)* + + mintát! Ez 33 féleképpen illeszkedik az "aaaa" szövegre, és + ez a szám rohamosan növekszik, ahogy a szöveg egyre hosszabb + lesz. (A * illeszkedhet 0-szor, 1-szer, 2-szer, 3-szor vagy + 4-szer, és - 0-t kivéve - minden esetben a + is különbözõ + számúszor.) Amikor a minta fennmaradó része ilyen és az + illesztés egésze sikertelenül érne vége, PCRE elvben + végigpróbálja az összes lehetõséget, ami rendkívül sok idõt + vehet igénybe. + + Néhány egyszerûbb minta esetén optimalizálás történik, mint + például + + (a+)*b + + , ahol literális (önmagára illeszkedõ) karakter követi a + vizsgált részt. Mielõtt a hagyományos illesztési eljárás + elkezdõdik, PCRE megvizsgálja, hogy elõfordul-e késõbb a + mintában "b", és ha nem, akkor azonnal sikertelennek + minõsíti az illesztést. Amikor azonban nem literális követi + a mintarészt, akkor ez az optimalizáció nem használható. + A különbséget megvizsgálhatod a + + (a+)*\d + + minta viselkedésével összehasonlítva. Az elõbbi szinte + azonnal véget ér, ha csupa "a"-ból álló sorozatra illesztik, + míg az utóbbi kipróbálása jelentõs idõt vesz el 20 + karakternél hosszabb tárgyszövegekre. + </literallayout> + </refsect2> + </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 +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 +--> \ No newline at end of file