RegularExpressions

Motor

Guest
RegularExpressions

Как оптимально реализовать следущее:

пример1

дано:
$st = 'games'
$ss = '/demosoft/games/Crimsonland/Path/Crimsonland198.exe'

надо:
$ss изменить на '/demosoft/<B>games</B>/Crimsonland/Path/Crimsonland198.exe'

пример2

дано:
$st = 'DOC'
$ss = '/pub/buiseness/GNI/INPUTDOC.291/'

надо:
$ss изменить на '/pub/buiseness/GNI/<B>INPUTDOC.291</B>/'


Сделал это с помощью строковых функций, но получилось очень много кода, как это реализовать на регулярных выражеиях???
 

sage

Новичок
используй опережающую и ретроспективную проверку
 

Oleg Puzanov

Guest
Код:
<?php

//$st = 'DOC';
//$ss = '/pub/buiseness/GNI/INPUTDOC.291/';

$st = 'games';
$ss = '/demosoft/games/Crimsonland/Path/Crimsonland198.exe';

$ss = explode ('/', $ss);
for ($i=0; $i<sizeof ($ss); $i++)
{
   $ss[$i] = preg_replace ("|(.*?)(".$st.")(.*?)|Uis", "<b>\$1\$2\$3</b>", $ss[$i]);
}

$ss = implode ('/', $ss);

echo $ss;
?>
 

korvin0

моська
Матка боска, как говорят католики, что вы тут привели??? Решение занимает 1(!) строку:
$ss = preg_replace("/[^\/]*".$st."[^\/]*/","<B>\\0</B>",$ss);
 

si

Administrator
Maxim Matyukhin
прочитал второе издание книги по регам ? :)
 

Макс

Старожил PHPClub
si
да, и после этого очень полюбил всякие задачки по регам :)
 

sage

Новичок
2korvin0

подходит, почему нет. имхо, использовать опережающую и ретроспективную проверку было бы правильнее, но это моё сугубо личное мнение:)

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

Макс

Старожил PHPClub
korvin0
ссылка на FTP-архив, в котором есть эта книга на английском пролетала в форуме OFFTOPIC, примерно месяц назад.
Если с английским дружишь - поищи
 
Сверху