Zdravím.. poradí někdo jak pomocí reg.výr. vyjmu z řetězce ty části, které vyhovují a uložím je do pole? Vím jak je nahradit, ale po tomhle marně pátram.
Našel jsem preg_split(); ale to se mi nejak nezdá.
Díky za rady.
<HTML>To umi snad vsechny reg. funkce ;)
ereg ( string pattern, string string [, array ®s] )
ereg($vyraz, $retezec, $pole_vysledku)
preg_match ( string pattern, string subject [, array &matches [, int flags [, int offset]]] )
preg_match($vyraz, $retezec, $pole_vysledku)
preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )
preg_match_all($vyraz, $retezec, $pole_vysledku)</HTML>
Vyzkousel jsem tedy tohle
ereg($vyraz, $retezec, $pole_vysledku)
ale vysledek byt ten, ze doslo k ulozeni do pole pouze prvniho vyskytu casti vyhovujiciho retezce.
Kdyz by to slo tak jednoduse, tak proc by popisovali na inetvalu tohle?
function cReex($InpText, $RegExp)
{
$this->RE="(".$RegExp.")(.*)$";
$this->Text=$InpText;
$this->arFound=array();
while(eregi($this->RE,$this->Text,$regs))
{
array_push($this->arFound,$regs[1]);
$this->Text=$regs[2];
};
}
Ten uvedeny priklad z intervalu funguje, ale jeho vykonani je dosti zdlouhave dle me kvuli tomu cyklu.
Napadlo me zda by se to nedalo udelat tak ze vse co vyrazu nevyhovuje by se smazalo resp. nahradilo sesparátorem. Tim bych dostal jen text vyhovujici reg. výrazu oddělený seperátorem a pomocí explode(); vytvořil pole.
Řekl bych že by to mohlo jít, jen nevím jak zapsat ten regulární výraz, jde to nějak jen že se uvede "!" který bude znamenat nahradit vše jen né to co vyhovuje? Pokud to jde tak bych prosil příklad zápisu.
Díky.
Tohle jsem vždycky musel řešit přes preg_match_all, přes posixové regulání výrazy taky nevím jak.
Řekl bych, že tohle maká lépe a rychleji než příklad z intervalu
preg_match_all("/http:\/\/[a-z0-9-_]{1,}\.[a-z0-9-_.]{2,}\.[a-z]{2,4}/", $text, $chars);
for($i=0;$i<count($chars[0]);$i++)
{
echo $chars[0][$i]."<br> ";
}
az na ten detail, ze koncovka neni jen cz, com, org, ale take muzeum
Az na ten detail, ze za \\ krome az0-9-_ muze byt i AZ a tusim nejake ~!@#%$^*(... atd
Jinak teda nevim, jestli je tema vyresene, ale v manualu u reg vyrazu jsou takove priklady, kde to rozebiraji.
take muzes splitovat, explodovat podle znaku lomitko, jestli ti jde o adresare. Mozna by to chtelo upresnit.
http://www.volny.cz/peter.mlich/www.htm#mssub19
To jsem presne cekal... ja tu nerozebiral vystiznost zapisu regularniho vyrazu, ale nejjednodusi zpusob reseni, jak z textu dostat vse co vyhovuje reg. vyrazu.
Gandalf (trouble.borec.cz)
Mno, ja bych postupoval opacne.
Vse, co nevyhovuje (URL)+ nahradit | a pak to explode podle |
a mas tam seznam URL.
Takhle ti to da myslim jen znaky, ne? Ale ja to teda nepouzival, ja pouzivam javascriptove reseni. Akorat mi odbourali databazi ,tak mi cha nejede a nevim, jak se ten JS jmenuje, bych dal odkaz...
Asi jsem to trefil :)
http://mracek.hostuju.cz/chat/filter.js
Jo tohle jsem chtel puvodne taky, ale jak napises regularni vyraz pro to co nevyhovuje url?
mnoo, nevim. Vis, kdyz nepotrebujes, nezkoumas :)
Ale jeste mne napadlo exploze podle http:// , tim mas URL jako prvni pismena
a pak to regularnim vyrazem prepises na URL.
Jako, jestli mas funkcni reseni, tak to neres.