Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pomoc z wyrażeniem regularnym.
My4tic
post
Post #1





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Hej,

Mam problem z napisaniem odpowiedniego wyrażenia.

  1. <?php
  2. $strInput = 'Użytkownik UserA wysłał wiadomość do UserB o tytule Tytuł. Wiadomość dostarczona';
  3. preg_match_all('/^Użytkownik ([a-zA-Z0-9])+ wysłał wiadomość do ([a-zA-Z0-9])+ o tytule ([a-zA-Z0-9])+. Wiadomość dostarczona$/',  $strInput , $arrOutput);
  4. ?>


Wynik:

  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.        )
  6.  
  7.    [1] => Array
  8.        (
  9.        )
  10.  
  11.    [2] => Array
  12.        (
  13.        )
  14.  
  15.    [3] => Array
  16.        (
  17.        )
  18. )
  19. ?>


Chciałbym otrzymać tablicę zawierającą UserA, UserB i Tytuł. W czym problem?

-- edit (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)

Ehh... patrzyłem i patrzyłem a nie widziałem, że + są za nawiasami (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Problem rozwiązany ;-)

Ten post edytował My4tic 19.10.2008, 15:11:07
Go to the top of the page
+Quote Post
AxZx
post
Post #2





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


nie w czym problem.
ale może takie coś wystarczy

  1. <?php
  2. $strInput = 'Użytkownik UserA wysłał wiadomość do UserB o tytule Tytuł. Wiadomość dostarczona';
  3.        preg_match_all('#Użytkownik (.*) wysłał wiadomość do (.*) o tytule (.*). Wiadomość dostarczona#is',  $strInput , $arrOutput);
  4.        print_r($arrOutput);
  5. ?>
Go to the top of the page
+Quote Post
My4tic
post
Post #3





Grupa: Zarejestrowani
Postów: 260
Pomógł: 0
Dołączył: 4.08.2005

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


Dzięki, już sobie poradziłem ale mam kolejny problem.

  1. <?php
  2. $strInput  = 'Użytkownik UserA wysłał wiadomość do UserB o tytule Tytuł1. Wiadomość dostarczona';
  3. $strInput .= 'Użytkownik UserC wysłał wiadomość do UserD o tytule Tytuł2. Wiadomość dostarczona';
  4.  
  5. preg_match_all('/^Użytkownik ([a-zA-Z0-9]+) wysłał wiadomość do ([a-zA-Z0-9]+) o tytule ([a-zA-Z0-9]+). Wiadomość dostarczona$/',  $strInput , $arrOutput, PREG_SET_ORDER);
  6. ?>


Chciałbym żeby $arrOutput wyglądało tak:

  1. <?php
  2. (
  3.    [0] => Array
  4.        (
  5.            [0] => U&#380;ytkownik UserA wysłał wiadomość do UserB o tytule Tytuł1. Wiadomość dostarczona
  6.            [1] => UserA
  7.            [2] => UserB
  8.            [3] => Tytu&#322;
  9.        )
  10.  
  11.    [1] => Array
  12.        (
  13.            [0] => U&#380;ytkownik UserC wysłał wiadomość do UserD o tytule Tytuł2. Wiadomość dostarczona
  14.            [1] => UserC
  15.            [2] => UserD
  16.            [3] => Tytu&#322;
  17.        )
  18. )
  19. ?>


...ale coś nie śmiga (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

-- edit

Już wiem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

  1. <?php
  2. preg_match_all('|Użytkownik ([a-zA-Z0-9]+) wysłał wiadomość do ([a-zA-Z0-9]+) o tytule ([a-zA-Z0-9]+). Wiadomość dostarczona$|U',  $strInput , $arrOutput, PREG_SET_ORDER);
  3. ?>


Ten post edytował My4tic 19.10.2008, 15:54:59
Go to the top of the page
+Quote Post
MariuszT
post
Post #4





Grupa: Zarejestrowani
Postów: 26
Pomógł: 1
Dołączył: 9.06.2003
Skąd: Tomaszów Mazowiecki

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


Kod
<?php
preg_match_all('/Użytkownik (.+?) wysłał wiadomość do (.+?) o tytule (.+?)\. Wiadomość dostarczona/si',  $strInput, $arrOutput, PREG_SET_ORDER);
?>


Odporne na polskie litery w szukanych frazach. Ale wszystko zależy jakie są możliwe dane wejściowe. Bo jeżeli np. w nazwach userów dopuszczasz spacje a w tytule np. kropkę to trzeba będzie zmodyfikować wyrażenie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Edit
Mi Twoje nie działa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Edit 2
Jak wsadziłem jako kod PHP to wycięło jeden znak więc zmieniam na Kod.

Edit 3
Dobra, w sumie to nie wiem po co na początku tak kombinowałem. Zmieniłem moją propozycję, taka wydaje się najlepsza. Teraz wyrażenie jest odporne na wszystkiego rodzaju udziwnienia w szukanych ciągach znaków.

Ten post edytował MariuszT 19.10.2008, 16:33:17
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 10:53