ФорумПрограммированиеPHP для идиотов → Регулярко

Регулярко

  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 14:21

    preg_replace('#<!–\\s*BEGIN:\\s*test\\s*–>.*(\\{test\\}).*<!–\\s*END:\\s*test\\s*–>#is', 'xyu!dwdw', $text);

    выполняю этот скрипт, а php выводит чисто «xyu!dwdw», а нужно чтобы выводил текст между <!– BEGIN: test –> и <!– END: test –> с заменой. Тоесть если исходный текст такой:
    <!– BEGIN: test –><dddwwddw> {test} dwdwwdadwaarffegrgrggrgr<!– END: test –>

    то нужно чтоб результат был такой
    <dddwwddw> xyu!dwdw dwdwwdadwaarffegrgrggrgr
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 1 августа 2008 г. 14:36, спустя 14 минут 34 секунды

    для твоего случая str_replace лучше подойдет
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 14:37, спустя 1 минуту 3 секунды

    для твоего случая str_replace лучше подойдет

    Мне нужно, что пробелы (\s*) правильно обрабатывала (хоть их тыща).
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 1 августа 2008 г. 14:39, спустя 2 минуты 24 секунды

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

    preg_replace('#([a-z])([test])([a-z])#is', '\\1xyu\\3', "qwertyTESTytrewq");
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 14:52, спустя 12 минут 46 секунд

    o_O спс сделал
    #<!–\s*BEGIN:\s*{$key}\s*–>(.*)\{{$key}\}(.*)<!–\s*END:\s*{$key}\s*–>#is
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 19:32, спустя 4 часа 40 минут 5 секунд

    Млааа…
    А можно средствами регулярок выдрать из текста все теги {test}, которые не в блоках, тоесть просто {test} а не <!– BEGIN: test –>blahblah{test}blahblah<!– END: test –> ?
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 1 августа 2008 г. 21:22, спустя 1 час 49 минут 20 секунд

    да

    #(?!<.*)(?<!\w)([test])(?!\w|[^<>]*>)#i


    это регулярка для html она трогает все кроме тегов
    но твой случай под нее подходит
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 22:02, спустя 40 минут 31 секунду

    хм, к примеру есть такой текст:

    {text}
    <!– BEGIN: test –>
    {test}
    <!– END: test –>


    В результате в массив должен занестись только тег {text}, так как он не в блоке.
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 1 августа 2008 г. 22:15, спустя 12 минут 51 секунду

    вот такая #>\{(.+?)\}<#is регулярка ищет маркеры внутри блока, а как её переделать, чтобы она искада маркеры вне блока?
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 2 августа 2008 г. 10:53, спустя 12 часов 38 минут 17 секунд

    попробуй так
    #(.*)<.*?>.*<.*?>(.*)#is


  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 2 августа 2008 г. 12:16, спустя 1 час 22 минуты 51 секунду

    Sneg*, хочешь написат еще один XTemplate?

    то что тыпытаешьс сделать при твоем уровне понимания регулярок нереально, а за тебя писатьне будут. заметь авторы XTemplate спецально начинают шаблоны на <!– BEGIN: main –> чтобы искать только между тегами
  • Lirck

    Сообщения: 1658 Репутация: N Группа: Джедаи

    Spritz 2 августа 2008 г. 12:56, спустя 39 минут 47 секунд

    Sneg*, хочешь написат еще один XTemplate?

    Ты ошибся…

Пожалуйста, авторизуйтесь, чтобы написать комментарий!