![]() |
![]() ![]() |
![]() |
![]()
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. |
|
|
![]()
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?
|
|
|
![]()
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
![]() Teraz pobieram to przez exploda ale chcial bym aby to bylo zgrabniej napisane, wiec wolal bym w regularnych. |
|
|
![]()
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" ) |
|
|
![]()
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
![]() 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. |
|
|
![]()
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 ![]() 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 ). |
|
|
![]()
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? |
|
|
![]()
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] |
|
|
![]()
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] |
|
|
![]()
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] |
|
|
![]()
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. |
|
|
![]()
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. |
|
|
![]()
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
![]() |
|
|
![]()
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
![]() Kod /^(?::([^ ]+) )?([^ ]+)(?: (.+))?/
|
|
|
![]()
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 ![]() |
|
|
![]()
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
![]() |
|
|
![]()
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
|
|
|
![]()
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] |
|
|
![]()
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
|
|
|
![]()
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. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 23:23 |