[как] Одинаковая последовательность

Тема в разделе "Регулярные выражения", создана пользователем AntonR, 13 июн 2008.

Статус темы:
Закрыта.
Модераторы: xpert13
  1. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    А как сделать, чтобы разделить последовательность такого типа
    \d{5}\s\([А-Я]{3}\)разнообразный текст\d{5}\s\([А-Я]{3}\)разнообразный текст\d{5}\s\([А-Я]{3}\)разнообразный текст

    на части
    array[0] = \d{5}\s\([А-Я]{3}\)разнообразный текст
    array[1] = \d{5}\s\([А-Я]{3}\)разнообразный текст
    array[2] = \d{5}\s\([А-Я]{3}\)разнообразный текст
    !!
    а то невыходит никак :confused: разделить именно на такие части???
     
  2. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    ну так возьми в скобки нужны части
    Код:
    (\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)
    
    и после preg_match() обращаяся к нужной скобке
    PHP:
    preg_match('/(\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)/'$result$tmp);
    $code $tmp[0];
    $code $tmp[1];
    $code $tmp[2];
    $code $tmp[3];
     
  3. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    Не, ну это понятно!
    Тут моя вина, просто чучуть не так задал вопрос:
    \d{5}\s\([А-Я]{3}\)разнообразный текст\d{5}\s\([А-Я]{3}\)разнообразный текст ................. .................. .................. \d{5}\s\([А-Я]{3}\)разнообразный текст

    и надо

    array[0] = \d{5}\s\([А-Я]{3}\)разнообразный текст
    array[1] = \d{5}\s\([А-Я]{3}\)разнообразный текст
    ......................................................................
    array[N] = \d{5}\s\([А-Я]{3}\)разнообразный текст

    P.S. Просто если сделать, вот так
    preg_match('\d{5}\s\([А-Я]{3}\)(.*)', ...), то понятное дело оно выдаёт все до конца. А мне необходимо как разделить эти одинаковые последовательности!!
     
  4. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    и в чем вопрос ?
    preg_match('/(\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)(\d{5}\s\([А-Я]{3}\)разнообразный текст)/', $result, $tmp);

    yf выходе получишь массив

    в чем вопрос то ?
     
  5. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    Так проблема ж в том что "разнообразный текст", подразумевает, что там идёт любой текст с цифрами, буквами и разными символами :).
     
  6. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    разнообразный текст- во всех случая один и тот же ?
    ,если да -- почитай про ссылки назад
    http://www.webmasterschool.ru/regex/ch8.php
     
  7. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    Да, конечно, разный!!
    Идёт типа этого:

    123456 (АПР)
    оаджофыаовыфа
    фываодфыоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаов
    выфафыва
    564824 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва
    .................................................................
    454564 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфавыфаодофвыад555555ыавыфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва
    654321 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва
    -----------------------------------------------------------
    ну и надо разбить на части
    ...
    temp[N-1]="454564 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфавыфаодофвыад555555ыавыфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва";
    temp[N]="654321 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва".
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    регулярные выражение -- такая вещь , с которой лучше иметь конкретное дело

    в том примере что ты привел :
    первый блок вырезакется как
    PHP:
    if (preg_match('/(\d{6}\s\(\w{3}\)\s([\w|\s]+)\d{5}\s\(\w{3}\)\s([\w|\s]+)\s)\d{6}/'$result$tmp)) {
        
    $code $tmp[1];
    что бы найти второй -- из общего текста удали первый и повтори поиск

    это весьма грубый вариант, наверняка можно придумать и лучше , но это так на вскидку
    если подумать возможно найдется более элегантное решение
    это вариант рабочий

    ,ЗЫ или давай образец того что ты будешь обрабатывать
     
  9. AntonR

    AntonR

    Регистр.:
    29 ноя 2007
    Сообщения:
    176
    Симпатии:
    75
    Суть дела, что жирная часть точно фиксирована, а всё остальное может быть в произвольной форме, но оно точно там есть!!!
    123456 (АПР)
    оаджофыаовыфа
    фываодфыоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаов
    выфафыва
    564824 (АПР)
    оаджофыаовыфафываолдоыфвжао
    фываодфыдфыоваждоыфвоавф
    ыавоыжфаовжф
    а87787987фыавдоыфаоввыфаооыжфвадж
    выфафыва
     
  10. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    число строк одинаковое ?

    в твоих примерах -- да , пользуйся этим ( если да -- имхо самое простое)


    ну или выдерет все 'tktvtyns кроме последнего

    PHP:
    if (preg_match('/(\d{6} \(АПР\)([\w|\s]*?))\d{6} \(АПР\)/'$result$tmp)) {
        
    $code $tmp[1];
    }
    вполне рабочий пример я уже дал , или больше инфы о формате данных
     
Статус темы:
Закрыта.