Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyrażenie regularne, Ograniczenie zwracanych elementów
Mlodycompany
post 2.12.2012, 13:52:17
Post #1





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Witam. Przejdę od razu do rzeczy. Mam taki ciąg znaków
Kod
Dec  2 13:24:40 zzz sshd[7317]: Failed password for bin from xx.xx.xx.xx port 39817 ssh2
a do niego taki wzór
Kod
/^([a-zA-Z]{3})( {1,2})([0-9]{1,2}) ([0-9]{2}):([0-9]{2}):([0-9]{2}) (.*?) (.*?): (.*?)$/
Preg_match zwraca
Kod
array(10) {
  [0]=>
  string(95) "Dec  2 13:24:40 zzz sshd[7317]: Failed password for bin from xx.xx.xx.xx port 39817 ssh2"
  [1]=>
  string(3) "Dec"
  [2]=>
  string(2) "  "
  [3]=>
  string(1) "2"
  [4]=>
  string(2) "13"
  [5]=>
  string(2) "24"
  [6]=>
  string(2) "40"
  [7]=>
  string(3) "zzz"
  [8]=>
  string(10) "sshd[7317]"
  [9]=>
  string(56) "Failed password for bin from xx.xx.xx.xx port 39817 ssh2"
}
a chciałbym aby zwrócił tylko i wyłącznie ostatni element tablicy. Wiem, że mogę to zrobić po prostu w kodzie np.
  1. $arr[9]
ale mi chodzi o to aby we wzorze wyrażenia ograniczyć elementy, które maja być zwracane. Ewentualnie może zwracać tablicę z ustalonymi kluczami tak, żeby np zamiast klucza 9 była treść. Czy jest to możliwe?
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 14:02:21
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


powywalaj nawiasy, to co jest między nimi zostaje zwrócone w wynikach, wystarczy że zostawisz ostatnią parę nawiasów i powinno być ok wink.gif
Go to the top of the page
+Quote Post
Mlodycompany
post 2.12.2012, 14:08:37
Post #3





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


Że tak powiem - no i gitara. O to mi chodziło. Dzięki wielkie

A jeszcze mam drugie szybkie pytanie. Z tego co zwraca preg_match chciałbym wyciągnąć pewne rzeczy w ten sposób, że daje
Kod
Failed password for %user% from %ipAddr% port %port% ssh2
i mam w zmiennych kolejno user, ipAddr, port wartości z tego co zwraca preg_match. Zagmatwałem trochę ale myślę, że jest to zrozumiałe smile.gif

Ten post edytował Mlodycompany 2.12.2012, 14:12:25
Go to the top of the page
+Quote Post
Pawel_W
post 2.12.2012, 14:17:11
Post #4





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

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


str_replace, ew. sprintf (musiałbyś %user% zamienić na %s itd, wszystko jest w manualu)
Go to the top of the page
+Quote Post
Mlodycompany
post 2.12.2012, 14:28:12
Post #5





Grupa: Zarejestrowani
Postów: 910
Pomógł: 44
Dołączył: 20.02.2008
Skąd: Łódź

Ostrzeżenie: (20%)
X----


chodzi mi zupełnie o co innego. Otóż np do funkcji daje 2 argumenty Failed password for bin from xx.xx.xx.xx port 39817 ssh2 i
Failed password for %user% from %ipAddr% port %port% ssh2
a ona tworzy mi zmienne $user $ipAddr $port z zawartością odpowiednio bin xx.xx.xx.xx 39817


Napisałem sobie taką funkcję. Gdyby komuś była potrzebna to ją tutaj umieszczam

  1. function getDataFromStr( $str, $pattern ) {
  2. preg_match_all( "/%(.*?)%/", $pattern, $a );
  3. preg_match( "/" . preg_replace( "/%(.*?)%/", "(.*?)", $pattern ) . "/", $str, $b );
  4. $a = $a[ 1 ];
  5. unset( $b[ 0 ] );
  6. $b = array_values( $b );
  7. foreach ( $a as $k => $v ) {
  8. global $$v;
  9. $$v = $b[ $k ];
  10. }
  11. }
  12.  
  13. getDataFromStr( "Dec 2 14:07:49 zzz sshd[10722]: Failed password for mayesto from xx.xx.xx.xx port 52345 ssh2", "Failed password for %user% from %ipAddr% port %port% ssh2" );
  14. var_dump( $user, $ipAddr, $port );


Kod
string(7) "mayesto"
string(11) "xx.xx.xx.xx"
string(5) "52345"


Ten post edytował Mlodycompany 2.12.2012, 16:00:01
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 18.07.2025 - 11:48