Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Wyrazenie regularne
Seth
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Probuje stworzyc wyrazenie ktore odpowiadalo by takiemu zapisaowi:
Kod
[:<prefix>] <command> [<param>]

i pobieralo <prefix>, <command> i <param>
To co jest w [ i ] jest opcjonalne. Spacje musza byc zachowane.

Jezeli ma ktos pomysl byl bym wdzieczny za pomoc.
Go to the top of the page
+Quote Post
Jabol
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


a nie łatwieł byłoby zrobić pętelke, przejechać się po tekście i wyciągnąć to ręcznie?
Go to the top of the page
+Quote Post
Seth
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Cytat
a nie łatwieł byłoby zrobić pętelke, przejechać się po tekście i wyciągnąć to ręcznie ( tutaj przykład co do wysokopoziomowości winksmiley.jpg ) ?

Teraz pobieram to przez exploda ale chcial bym aby to bylo zgrabniej napisane, wiec wolal bym w regularnych.
Go to the top of the page
+Quote Post
Jabol
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


spróbuj tak.[php:1:2c4955e52e]<?php
$str="[:<prefix>]<commad>[<param>]";
$prefix="";
$command="";
$param="";
if($str{0} == "[" && $str{1} == ":")
{
$i=2;
while($str{$i} != "]")
$prefix.=$str{$i++};
$i++;
while($str{$i} != "[")
$command.=$str{$i++};
$i++;
while($str{$i} != "]")
$param.=$str{$i++};
}
printf( "%sn%sn%sn%sn", $str, $prefix, $command, $param );
?>[/php:1:2c4955e52e]kurcze, daje mi wynik
Cytat
[:][]
( php5beta2 )
lol - trza było wysłać header( "Content-Type: text/plain" )
Go to the top of the page
+Quote Post
Seth
post
Post #5





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Nie o to chodzi smile.gif

Ten zapis: [:<prefix>] <command> [<param>] to przenosnia tzn. prawdziwe wyrazenie moze byc takie:

:costam jakas_komenda parametry parametr2
lub
:costam jakas_komenda parametry
lub
:costam jakas_komenda
lub
jakas_komenda parametry
itd.
Go to the top of the page
+Quote Post
Jabol
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Cytat
Ten zapis: [:<prefix>] <command> [<param>] to przenosnia
ups rolleyes.gif ... to się chyba nie zrozumięliśmy... 8)
aczkolwiek w takim razie też użyłbym exploda, a jeżeli już wyr. reg. to tylko jako ćwieczenie ( IMHO tutaj strata czasu i zasobów ).
Go to the top of the page
+Quote Post
FiDO
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Kod
(?::(.*?) )?([^ $]+)(?: (.*))?

Takie cos Cie zadowala?
Go to the top of the page
+Quote Post
Seth
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Nie dziala.

Kod, ktory testuje to wyglada tak:
[php:1:b98c948329]$test = ':host.pl 324 Test';
preg_match( "(?:[:](.*?) )?([^ $]+)(?: (.*))?", $test, $match );
print_r( $match );[/php:1:b98c948329]
Go to the top of the page
+Quote Post
FiDO
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Nie zapominaj, ze wyrazenie do preg_match'a trzeba jeszcze zamknac w delimitery...

[php:1:6a09ec0507]
<?php
$test = ':host.pl 324 Test';
preg_match( "/(?::(.*?) )?([^ $]+)(?: (.*))?/", $test, $match );
print_r( $match );
?>
[/php:1:6a09ec0507]
Go to the top of the page
+Quote Post
adwol
post
Post #10





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
Probuje stworzyc wyrazenie ktore odpowiadalo by takiemu zapisaowi:
Kod
[:<prefix>] <command> [<param>]

i pobieralo <prefix>, <command> i <param>
To co jest w [ i ] jest opcjonalne. Spacje musza byc zachowane.

[php:1:b3ce5d5746]<?php
if (preg_match('/^(:([^ ]*))? ([^ ]+)( ([^ ]*))?/', $tekst, $m))
list($prefix, $command, $param) = array($m[2], $m[3], $m[5]);
?>[/php:1:b3ce5d5746]
Go to the top of the page
+Quote Post
FiDO
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Jesli juz ma byc po Twojemu to tak:
Kod
/^(:([^ ]*) )?([^ ]+)( ([^ ]*))?/

Pozatym Twoja albo moja (w zaleznosci od tego co chcial dokladnie osiagnac Seth) wersja nie dziala dla przypadku z wieloma parametrami.
Twoja wersja "wylapuje" tylko pierwszy, a moja wszystkie do jednego stringa.
Go to the top of the page
+Quote Post
adwol
post
Post #12





Grupa: Zarejestrowani
Postów: 691
Pomógł: 0
Dołączył: 6.08.2003

Ostrzeżenie: (0%)
-----


Cytat
Jesli juz ma byc po Twojemu to tak:
Kod
/^(:([^ ]*) )?([^ ]+)( ([^ ]*))?/

Ok, ale jeszcze znalazlem 2 nieścisłości w swojej wersji:
Kod
/^(:([^ ]+) )?([^ ]+)( ([^ ]+))?/

Teraz powinno być ok.
Go to the top of the page
+Quote Post
Seth
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Wielkie dzieki panowie dziala smile.gif
Go to the top of the page
+Quote Post
FiDO
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


Ok, to i ja poprawilem swoja winksmiley.jpg
Kod
/^(?::([^ ]+) )?([^ ]+)(?: (.+))?/
Go to the top of the page
+Quote Post
Seth
post
Post #15





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Zmodyfikowalem troche wyrazenie, ktore podales adwol tak aby w przypadku pojawienia sie wiecej niz jednego parametru oddzielonego spacja byly dostepne jako jeden ciag:
Kod
/^(:([^ ]+) )?([^ ]+)( (.*))?/

...moze komus sie to przyda winksmiley.jpg
Go to the top of the page
+Quote Post
FiDO
post
Post #16





Grupa: Przyjaciele php.pl
Postów: 1 717
Pomógł: 0
Dołączył: 12.06.2002
Skąd: Wolsztyn..... Studia: Zielona Góra

Ostrzeżenie: (0%)
-----


No to przeciez to samo (i jeszcze wiecej winksmiley.jpg ) masz w "moim" wyrazeniu ;P
Go to the top of the page
+Quote Post
Seth
post
Post #17





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Wiem... ale w adwola tego nie bylo ;P
Go to the top of the page
+Quote Post
Jabol
post
Post #18





Grupa: Przyjaciele php.pl
Postów: 1 467
Pomógł: 13
Dołączył: 22.02.2003

Ostrzeżenie: (0%)
-----


Ok, korzystając z chwili wolnego czasu jeszcze raz podeszłem do sprawy - i naprawdę chcięlibyście używać do tego werażeń regularnych ? 8O [php:1:9bcac563ad]<?php
header("Content-Type: text/plain");
$cmd=":someprfx somecommand some args and some more ones VeRy BiG 4rg00m3||7sn";
$prefix="";
$command="";
$params=array();
$i=1;
$ws=0;
if($cmd{0}==':')
{
$curr=&$prefix;
while($cmd{$i}!="n")
{
$curr.=$cmd{$i++};
if($cmd{$i}==' ')
{
$i++;
if(++$ws==1)
$curr=&$command;
else
$curr=&$params[];
}
}
}
printf("prefix: %sncommand: %snparams: ", $prefix, $command);
print_r($params);
?>[/php:1:9bcac563ad]
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #19





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat
Ok, korzystając z chwili wolnego czasu jeszcze raz podeszłem do sprawy - i naprawdę chcięlibyście używać do tego werażeń regularnych ? 8O [php:1:9eb83bf300]<?php
header("Content-Type: text/plain");
$cmd=":someprfx somecommand some args and some more ones VeRy BiG 4rg00m3||7sn";
// ...
?>[/php:1:9eb83bf300]

Nie ma to jak wydajny kod :wink:
Perl'owe wyrażenia są naprawdę szybkie.


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
Seth
post
Post #20





Grupa: Przyjaciele php.pl
Postów: 2 335
Pomógł: 6
Dołączył: 7.03.2002

Ostrzeżenie: (0%)
-----


Ehhh... potrzebuje kolejnego wyrazenia:
<nazwa>.plugin.php
<nazwa> - pierwsza litera: [a-zA-Z] kolejne [a-zA-Z0-9_]
<nazwa> ma byc nazwa klasy, wiec i takie znaki jakie w nazwie klasy sa dostepne.

BTW: Moze ktos zna jakis dobry kurs wyrazn regularnych... szukalem w netcie ale jak dla mnie jest to napisane zbyt pobieznie :/

Jabol: IMHO Lepiej miec 3 linie kodu z wyrazeniem, niz tak jak Ty proponowales gdzie mozliwosc pomylki w kodzie jest wieksza.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 23:23