/ / ereg na prípravu problémov - php, regex, preg-replace, ereg

ereg na prípravu problémov - php, regex, preg-replace, ereg

Používam stiahnutý skript PHP na urýchlenievývoj mojich webových stránok, ale mám hromadu "zastaraných" správ prichádzajúcich v súvislosti s eregom. Budem vypnúť varovania predtým, ako sa dostanú naživo, ale snažím sa zabezpečiť, aby som ich vyčistil ako prvý!

Našiel som praktický sprievodca čo je dobré pre jednoduché kúsky, ako naprzmena eregi_replace pre preg_replace s / a / i, ale narazím na problémy s niektorými pokročilejšími výrazmi (s komentármi, zreťazením, premennými, priečkami a ďalšími - niektoré sú rovnaké typy, ale ja sa tak zmätený snažím a zlomiť to!).

Môže mi niekto povedať, kam by som mal dať / alebo / i, keď som aktualizoval nasledujúce, alebo rovnako ako vítam, povedzte mi, čo robiť s každým typom (alebo mi ukazovať na pokyny), aby som to mohol urobiť sám?

eregi("<!-- startBlock(([^)]+)) -->", $content["body"], $m)

eregi($reg, $content["body"], $m)

eregi("([^.]+).(.*)", $variable, $m)  ... I think (?) this is preg_replace("/([^.]+).(.*)/i", $variable, $m)

eregi("{url:([^}]+)}", $txt, $m))

eregi_replace("{".$key."}", $val, $txt)

eregi_replace("{script}", $HTTP_SERVER_VARS["SCRIPT_NAME"], $txt)

eregi_replace("{ifNotSet:".$m[1].":([^}]+)}", "", $txt)

aktualizácia: Zdá sa, že to všetko funguje (vďaka za pomoc) s výnimkou jednej z nižšie uvedených funkcií, kde nemôžem zistiť verzie preg - skúsil som rôzne kombinácie, ale výsledná stránka nikdy neposkytuje rovnaký výsledok ako verzia eregi (s linka chýb) Akékoľvek návrhy?

function parse(&$content) {
while (preg_match("/<!-- startBlock(([^)]+)) -->/i", $content["body"], $m)) {
$name = $m[1];
$block = array();
$block["name"] = $name;
$block["blocks"] = array();
$block["used"] = 0;
$block["values"] = array();
$reg = "<!-- startBlock(".$name.") -->(.*)<!-- endBlock(".$name.") -->";
if (!eregi("$reg", $content["body"], $m)) {
$this->error("block `".$name."" does not have startBlock() AND endBlock().");
}
$block["body"] = $m[1];
$content["body"] = eregi_replace("$reg", "{".$name."}", $content["body"]);
$content["blocks"][$name] = array();
$this->parse(&$block);
$content["blocks"][$name][0] = $block;
}
}

a potom začnem hovoriť o "referátoch týkajúcich sa časového volania", ktoré sa zdajú byť dokonca oveľa zložitejšie!

odpovede:

0 pre odpoveď č. 1

Predpokladám, že / máte na mysli oddeľovače na začiatok a koniec vzoru? Premýšľajte o nich ako o dvojitých citáciách okolo reťazca. Musia byť na začiatku a konci modelu, a to všetko / vo vzore je potrebné uniknúť /, môžete na konci umiestniť modifikátory i, v ktorom sa uvádza, že bude kontrolovať vzor, ​​ktorý nie je citlivý na veľkosť písma. tak /pattern/i bude kontrolovať vzor (nerozlišuje veľké a malé písmená) a prekladať povedať </a> aby sme sa pripravili, bolo by to niečo podobné /</a>/ (a môžete ho pridať, ak chcete).

Môžete urobiť spätné lomky niečo iné (povedzmeznaky, alebo niečo), ale zatiaľ by som ich len použil, aby som to jednoducho udržal. Môžu byť potrebné ďalšie úpravy, ale to sa zdá byť veľké.


0 pre odpoveď č. 2

/ / Sú iba hraničné znaky, môžeteskutočne používajte takmer akúkoľvek, ktorú chcete, pokiaľ sa nenachádzajú inde v regexu. / i znamená nerozlišujúcu veľkosť písmen, čo znamená, že vzory budú matčinou buď veľké alebo malé.

Dôležitá vec, ktorú si treba pamätať, je, ak si postavíš pred znak, ktorý unikne, a nerobí to ako zvláštny charakter.