regular v php
regular v php
Caute,
neviem si poradit s napisanim jedneho regularu v php
chcem napisat cez reg. vyraz, ze medzi slovami "abc" a "def" moze byt lubobolny pocet slov, okrem slova "def".
Dakujem
//edit: vstupny string je tvaru "xxx abc XXX def xxx xxx def xxx"
ja chcem cez regular povedat, ze XXX moze byt lubovolny string, ale nemoze obsahovat slovo "def"
neviem si poradit s napisanim jedneho regularu v php
chcem napisat cez reg. vyraz, ze medzi slovami "abc" a "def" moze byt lubobolny pocet slov, okrem slova "def".
Dakujem
//edit: vstupny string je tvaru "xxx abc XXX def xxx xxx def xxx"
ja chcem cez regular povedat, ze XXX moze byt lubovolny string, ale nemoze obsahovat slovo "def"
-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
^abc.+def$
Re: regular v php
editol som svoj prispevok, pozri na nam prosim este razGrim napísal:^abc.+def$
pri takom vstupe aky som uviedol, by tvoj regular nesplnal podmienku, ze slovo medzi "abc" a "def" nemoze byt "def"
-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
...aha, pardon, to som prehliadol...tak asi takto, je to z hlavy a asi by sa na to mal ešte pozrieť niekto skúsenejší...
^[^def]abc.+[def]def.+[def]def.+[$def]$
^[^def]abc.+[def]def.+[def]def.+[$def]$
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: regular v php
ten stred sa mi nepáči, ani ten dolár v poslednej hranatej zátvorke.. vlastne celé to asi vzniklo iba náhodným drbaním do klávesnice 
Re: regular v php
tiez tomu moc nechapemaudiotrack napísal:ten stred sa mi nepáči, ani ten dolár v poslednej hranatej zátvorke.. vlastne celé to asi vzniklo iba náhodným drbaním do klávesnice
-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
...no na teba som tu čakal...konečne 
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: regular v php
Kód: Vybrať všetko
<?php
$str = "xxx abc XXX edo def xxx xxx def sdsdaf";
preg_match_all("/^.+abc+([^d][^e][^f]+)def/",$str,$arr);
var_dump($arr);
?>-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
...máš to zle, lebo výraz nemôže začínať "def"...a tebe môže začínať hocičím...
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: regular v php
ja v jeho správe nič také nevidím.Grim napísal:...máš to zle, lebo výraz nemôže začínať "def"...a tebe môže začínať hocičím...
-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
...a ty tam máš ľubovoľný počet znakov (vrátane def) a potom abc...Dart napísal: vstupny string je tvaru "xxx abc XXX def xxx xxx def xxx"
XXX moze byt lubovolny string, ale nemoze obsahovat slovo "def"
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: regular v php
lenže on v tom "tvare" má malé trojice xxx a veľkú trojicu XXX a práve na veľkú trojicu XXX stanovil kritérium, že nemôže obsahovať def. Z toho som vydedukoval, že čo je pred abc, a čo je za def nás netrápi, dôležité je to čo je medzi nimi. Na xxx nedal žiadne podmienky
-
Grim
Darca
- Príspevky: 8702
- Registrovaný: 25 jún 2008, 0:54
- Bydlisko: pod železničným mostom
- Kontaktovať používateľa:
Re: regular v php
...aha, tam rozhoduje aj veľkosť písmen?...no ako keby sa to nedalo odlíšiť nejak prehľadnejšie...
Re: regular v php
dik za reakciuaudiotrack napísal:tak?Kód: Vybrať všetko
<?php $str = "xxx abc XXX edo def xxx xxx def sdsdaf"; preg_match_all("/^.+abc+([^d][^e][^f]+)def/",$str,$arr); var_dump($arr); ?>
ale:
- nerozumiem ulohe "+" v tvojom vyraze na mieste "...abc+(..."
- napisal si to tak, ze medzi "abc" a "def" musi byt 1 znak iny ako "d", 1 znak iny ako "e" a aspon jeden znak iny ako "f"
z toho je vidno hned nielko nevyhod
= medzi "abc" a "def" musia byt aspon 3 znaky. Ja by som chcel aby tam nemuselo byt vobec nic (presnejsie, 1 biely znak musi byt)
= slovo "deff" nie je totozne slovu "def", tzn. taketo slovo sa moze nachadzat medzi "abc" a "def"
Je to narocne
//autoeditácia príspevku (10 Nov 2010, 0:15)
hej mas pravdu, snazil som sa o zrozumitelnost, no toto mi zrejme nevyslo. Je to tak ako to pochopil audiotrackGrim napísal:...aha, tam rozhoduje aj veľkosť písmen?...no ako keby sa to nedalo odlíšiť nejak prehľadnejšie...
Re: regular v php
Prepáčte, že sa vám tu montujem, no ja som nad tým zase rozmýšlal nejako takto:
Robí to všetko čo má (hádam som to pochopil správne) až na jednu vec. Nezoberie na vstupe abc a def za sebou (teda "abc def"), keďže slová oddeľujem \s a v takomto prípade sa tam pýtajú dva biele znaky, čomu reťazec "abc def" nezodpovedá.
Ak by to tak nebolo, tak by ale zase bral aj "adef" ako "def". Takže ak by ste toto niekto vedeli vyriešiť, tak by to vlastne aj šlo
(Teda berte to ako alternatívu k vašemu "na jednu šupu" prístupu)
Kód: Vybrať všetko
<?php
$str1 = "xxx abc ads dsaad a d def sdsdaf";
$str2 = "xxx abc def xxx def sdsdaf";
$str3 = "xxx aaa XXX xss def asd abc asdsfs";
$pat = "/^.*(\sabc\s(.*)?)\sdef\s.*$/";
if(preg_match($pat, $str1, $m))
{
print_r($m); echo "<BR><BR>\n\n";
if(!preg_match($pat, $m[1], $m)) echo "OK! <BR>\n";
else echo "No no no! <BR>\n";
}else echo "Total zle <BR>\n";
print_r($m);
?>Ak by to tak nebolo, tak by ale zase bral aj "adef" ako "def". Takže ak by ste toto niekto vedeli vyriešiť, tak by to vlastne aj šlo
(Teda berte to ako alternatívu k vašemu "na jednu šupu" prístupu)
Re: regular v php
BX: dik za radu... no tvoje riesenie mi nepomoze
pridaj si do kodu $str4="xxx abc XXX def xxx xxx def xxx"
a toto vyskusaj
malo by ti to matchnut "XXX"
t.j. string medzi "abc" a "def" ktory neobsahuje slovo "def"
pridaj si do kodu $str4="xxx abc XXX def xxx xxx def xxx"
a toto vyskusaj
malo by ti to matchnut "XXX"
t.j. string medzi "abc" a "def" ktory neobsahuje slovo "def"
Re: regular v php
Nechápem. Pri tom tvojom mečne "abc XXX def xxx xxx" a s tým ďalej pracuje, nájde tam def a teda reťazec nevyhovuje. Tak to má byť, nie?
(Tvoj str4 je rovnaký ako môj str2)
(Tvoj str4 je rovnaký ako môj str2)
Re: regular v php
No ano. Ja ale vyslovene potrebujem regular, ktory vytiahne string nachadzajuci sa medzi "abc" a "def" ktory neobsahuje slovo "def"BX napísal:Nechápem. Pri tom tvojom mečne "abc XXX def xxx xxx" a s tým ďalej pracuje, nájde tam def a teda reťazec nevyhovuje. Tak to má byť, nie?
(Tvoj str4 je rovnaký ako môj str2)
Re: regular v php
Jaj ja že ho chceš len kontrolovať. No to by bolo potom takto.
A vyrieši sa tým aj tá patália s "abc def" 
Kód: Vybrať všetko
<?php
$str1 = "text abc toto by malo vypisat def dalsi text";
$str2 = "text abc toto by def nemalo vypisat def dalsi text";
$str3 = "texy abc def dalsi text";
$pat = "/^.*\sabc\s(.*)?def\s.*$/";
if(preg_match($pat, $str3, $m))
{
if(!preg_match("/\sdef\s/", $m[1])) echo "OK! Vysledny string je <b>".$m[1]."</b> <BR>\n";
else echo "No no no! Vybraty string <b>".$m[1]."</b> obsahuje def <BR>\n";
}else echo "Total zly vstup <BR>\n";
print_r($m); echo "<BR><BR>";
?>Re: regular v php
Pozeram ze su tu odbornici na regular expressions. Len tak nahodou nemate link na nejaky dobry navod na regular expressions?
Co ktory znak znamena atd.
Co ktory znak znamena atd.