regular v php

Programovacie jazyky, rady, poradňa...
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

regular v php

Príspevok od používateľa Dart »

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"
Grim
Darca
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

^abc.+def$
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

Re: regular v php

Príspevok od používateľa Dart »

Grim napísal:^abc.+def$
editol som svoj prispevok, pozri na nam prosim este raz

pri takom vstupe aky som uviedol, by tvoj regular nesplnal podmienku, ze slovo medzi "abc" a "def" nemoze byt "def"
Grim
Darca
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

...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]$
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa audiotrack »

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 :)
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

Re: regular v php

Príspevok od používateľa Dart »

audiotrack 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 :)
tiez tomu moc nechapem
Grim
Darca
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

...no na teba som tu čakal...konečne :-D
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa audiotrack »

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);
?>
tak?
Grim
Darca
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

...máš to zle, lebo výraz nemôže začínať "def"...a tebe môže začínať hocičím...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa audiotrack »

Grim napísal:...máš to zle, lebo výraz nemôže začínať "def"...a tebe môže začínať hocičím...
ja v jeho správe nič také nevidím.
Grim
Darca
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

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"
...a ty tam máš ľubovoľný počet znakov (vrátane def) a potom abc...
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa audiotrack »

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
Darca
Používateľov profilový obrázok
Príspevky: 8702
Registrovaný: 25 jún 2008, 0:54
Bydlisko: pod železničným mostom
Kontaktovať používateľa:

Re: regular v php

Príspevok od používateľa Grim »

...aha, tam rozhoduje aj veľkosť písmen?...no ako keby sa to nedalo odlíšiť nejak prehľadnejšie...
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

Re: regular v php

Príspevok od používateľa Dart »

audiotrack napísal:

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);
?>
tak?
dik za reakciu

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)
Grim napísal:...aha, tam rozhoduje aj veľkosť písmen?...no ako keby sa to nedalo odlíšiť nejak prehľadnejšie...
hej mas pravdu, snazil som sa o zrozumitelnost, no toto mi zrejme nevyslo. Je to tak ako to pochopil audiotrack
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: regular v php

Príspevok od používateľa BX »

Prepáčte, že sa vám tu montujem, no ja som nad tým zase rozmýšlal nejako takto:

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);

?>
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 :P

(Teda berte to ako alternatívu k vašemu "na jednu šupu" prístupu)
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

Re: regular v php

Príspevok od používateľa Dart »

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"
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: regular v php

Príspevok od používateľa BX »

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)
Dart
Amateur
Amateur
Príspevky: 18
Registrovaný: 01 mar 2007, 21:39
Bydlisko: Prievidza

Re: regular v php

Príspevok od používateľa Dart »

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)
No ano. Ja ale vyslovene potrebujem regular, ktory vytiahne string nachadzajuci sa medzi "abc" a "def" ktory neobsahuje slovo "def"
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: regular v php

Príspevok od používateľa BX »

Jaj ja že ho chceš len kontrolovať. No to by bolo potom takto.

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>";

?>
A vyrieši sa tým aj tá patália s "abc def" :P
forfun
Light Expert
Light Expert
Príspevky: 77
Registrovaný: 03 jan 2010, 17:26

Re: regular v php

Príspevok od používateľa forfun »

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.
Napísať odpoveď