Помогите составить регулярное выражение

Discussion in 'PHP' started by slesh, 2 Jun 2009.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,222
    Reputations:
    455
    Немогу допереть как составить реулятрое выражение под данные таково формата:

    $x data1 $x data2 ..... $x dataN
    где x - это символы a-z 0-9
    строка может содержать переменное кол-во повторов блока $x data
    При этом мне необходимо выбрать все x и data
    При этом в тексте может встречаться $, по этому парсится должны только в тех местах где $ находится в начале строки или перед ним пробел и в после него - один символ a-z 0-9 а далее пробел.

    Пример строки:
    $a data1 $g da$ta2 $y data3 $2 data4 $2 data5
    на выходе я должен получить массив:
    a data1
    g da$ta2
    y data3
    2 data4
    2 data5

    P.S. Для PHP
     
    #1 slesh, 2 Jun 2009
    Last edited: 2 Jun 2009
  2. 159932

    159932 Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    591
    Likes Received:
    465
    Reputations:
    5
    PHP:
    <?php
    preg_match_all
    ('#\$([a-z0-9]{1,}) ([a-z0-9\$]{1,})#''$a data1 $g da$ta2 $y data3 $2 data4 $2 data5'$m);
    print_r(array_combine($m[1],$m[2]));
    ?>
     
    #2 159932, 2 Jun 2009
    Last edited: 2 Jun 2009
  3. 159932

    159932 Elder - Старейшина

    Joined:
    28 Sep 2007
    Messages:
    591
    Likes Received:
    465
    Reputations:
    5
    2 m0Hze

    не вникал я там в его условия, голова щас не сильно варит .. он дал пример, я по нему и составил регулярку .. ну а вообще есть для регулярок тема https://forum.antichat.ru/thread92492.html !
     
  4. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,587
    Likes Received:
    405
    Reputations:
    196
    PHP:
    $fp '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5';

    $x explode(' $'$fp);
    foreach(
    $x as $y){

    $data .=  $y ':';
    }

    $data explode(':'substr($data1));
    foreach(
    $data as $z){
    echo 
    $z PHP_EOL;
    }

    Громоздко( и не регулярка
     
    #4 попугай, 2 Jun 2009
    Last edited: 2 Jun 2009
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,222
    Reputations:
    455
    Всем спс.
     
  6. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,508
    Likes Received:
    389
    Reputations:
    101
    Один ассоциативный массив тут не получится заюзать, т. к., судя по примеру, ключи могут повторяться. Тут, наверно, следует использовать два обычных массива - в одном ключи, в другом - значения. Как-то так
    PHP:
    <?php
      $str 
    '$a data1 $g da$ta2 $y data3 $2 data4 $2 data5' "\n";
      
    $str .= '$b data_b $e data$2e $y d$at$a3 $7 da7ta $2 data$2' "\n";
      
    preg_match_all ('/\$([a-z0-9]) (.+?)(\s|\n)/'$str$m);
      
    //print_r ($m);
      
    $key $m[1];
      
    $val $m[2];
      
    print_r ($key);
      
    print_r ($val);
    ?>
    Тут условие, что строка должна завершаться символом \n:
    Code:
    Array                         
    (                             
        [0] => a                  
        [1] => g                  
        [2] => y                  
        [3] => 2                  
        [4] => 2                  
        [5] => b                  
        [6] => e                  
        [7] => y                  
        [8] => 7                  
        [9] => 2
    )
    Array
    (
        [0] => data1
        [1] => da$ta2
        [2] => data3
        [3] => data4
        [4] => data5
        [5] => data_b
        [6] => data$2e
        [7] => d$at$a3
        [8] => da7ta
        [9] => data$2
    )
    
     
    #6 krypt3r, 2 Jun 2009
    Last edited: 2 Jun 2009
  7. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,704
    Likes Received:
    1,222
    Reputations:
    455
    совершенно забыл указать что data - может содежать еще и пробелы )
    так что только у попугая нормально работает )
     
Loading...