Jak si přišel na to, že jsem nezkusil googlovat, právě, že to co jsem předložil byl výsledek googlování (myšleno obsah apostrofů vč. nich).
Podle návodu má tohle '^[<body]' být pravidlo, že nalezené musí začínat na <body a tohle '>$', že musí končit na >.
Co tam mám pořád špatně, že nedochází ke shodě?
<?php
$vyraz='[<](body|BODY)[^>]*[>]';
$zdroj='<body nějaký nesmysl wd"sf w*aů|"ds >';
echo preg_replace($vyraz,$zdroj);
?>
Děkuji za vysvětlení regulární výrazy mi nikdy nešli a nesnáším je, využívám je jednou za 5 let, když nění zbytí jako třeba teď.
Nicméně stejně nechápu co jsi to vytvořil za výraz: [<]body[^>]*[>]
Chápu z něho, že zřejmě musí začínat na "<body" pak mít neomezené množství znaku ">" a končit druhým znakem ">". Ve shodě by tedy mělo být "<body >>","<body >>>", "<body >>>>" atd. ale podle validátoru to tak není a je ve shodě i <body cokoliv>, což nechápu proč.
Protože:
[<] ... musí tvořit pouze jednoprvek složený z jednoho písmena abecedy, tedy "<", nic jiného
body ... Pevně napsaný řetězec, zřejmě nijak neměnný, ale nechápu, proč je [<] takto separováno v hranatých závorkách
[^>]* ... musí končit na libovolné opakování slova ">", ">>", ">>>", ...
[>] ... jelikož je to na konci, tak zas nevím co to tu dělá
Prostě děs.
Hvězdička není z DOS, ale ze všech systémů co jsem kdy měl v ruce (DOS,NT,UNIX,wildcard v síťařině, zástupný znak v systému DNS, prostě všude) :-D. Není nějaká funkce, do kterého bych mohl napsat jen zápis "str_replace(funkce(<body*>),$zdroj);" a on by si to na regulární výraz převedl sama? :-D