Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pomoc z wyrażeniem regularnym.
Forum PHP.pl > Forum > PHP
My4tic
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 wstydnis.gif

Ehh... patrzyłem i patrzyłem a nie widziałem, że + są za nawiasami tongue.gif Problem rozwiązany ;-)
AxZx
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. ?>
My4tic
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 smile.gif

-- edit

Już wiem 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. ?>
MariuszT
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 smile.gif

Edit
Mi Twoje nie działa 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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.