[php/pcre] повторение в ограничителях. туплю.

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

[php/pcre] повторение в ограничителях. туплю.

Непрочитанное сообщение FreeBSP » 2012-07-01 4:08:24

выделяю пыхом аккорды из текста подбора, пример файла прикрепляю
туплю..
надо преобразовать строку вида

Код: Выделить всё

TEXT<WORD  WORD ...   WORD>TEXT
в

Код: Выделить всё

<pre>TEXT<span>WORD</span>  <span>WORD</span> <span>...</span>   <span>WORD</span>TEXT</pre>
Здесь :
строка не содержит символов перевода строк
WORD - один или более идущих подряд непробельных символов, /(\S+)/
TEXT - ноль или более печатных символов, пробельные, буквенно-цифровые, спецсимволы
между < и WORD может быть ноль или более пробельных символов
в угловых скобках может быть одно или более WORD. между собой WORD разделены одним или более пробельными символами

вся строка предварительно отформатирована, и выводится в <pre> тегах, поэтому сохранение всех пробельных символов на своих местах обязательно.
угловая скобка считается метасимволом и в форматировании не участвует

в лоб напрашивается решение раскусить строку на три и разбирать их отдельно но это как то некрасиво :cz2: хочется все сразу одной регуляркой сделать. кто нить видит красивое решение?
Вложения
'39.txt
QUEEN - '39
(5.63 КБ) 34 скачивания
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: [php/pcre] повторение в ограничителях. туплю.

Непрочитанное сообщение FreeBSP » 2012-07-01 11:00:08

вроде решил через pcre_replace_callback(). но неужто нельзя одной регуляркой такое сделать?
для php >=5.3.0

Код: Выделить всё

freebsp# php -f pcre.php
one < two three> four <five six > seven
 => one  <span style="color: #333cc;">two</span> <span style="color: #333cc;">three</span> four <span style="color: #333cc;">five</span> <span style="color: #333cc;">six</span>  seven
freebsp# cat pcre.php
<?php
$src = "one < two three> four <five six > seven\n";
$dst = preg_replace_callback(
        "/<(.*?)>/",
        function($str) {
                //var_dump($str);
                return preg_replace("/(\S+)/","<span style=\"color: #333cc;\">\\1</span>", $str[1]);

        },
        $src
);
echo $src . " => " . $dst;

freebsp#
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!