|
|
|
| Всем привет! Имеется строка
= blabla xxx( ) + blabla - xxx ( )
Нужно заменить оба вхождения xxx() вместе со скобочками (да, там разное количество пробелов) на abc. При условии, что вначале строки есть "=". С первым то не проблема справиться, а вот второй не хочет поддаваться.
Что посоветуете?
Заранее благодарю. | |
|
|
|
|
|
|
|
для: Qtilla
(23.09.2010 в 10:56)
| |
<?php
$str = "= blabla xxx( ) + blabla - xxx ( )";
$template = "/=(.+)(xxx\s*\(\s*\))(.+)(xxx\s*\(\s*\))/Uis";
preg_match_all($template,$str,$matches);
echo preg_replace($template,"=$1abc$3abc",$str);
//= blabla abc + blabla - abc
?>
|
строго для таких типов строк "= blabla xxx( ) + blabla - xxx ( )" | |
|
|
|
|
|
|
|
для: Tonik992
(23.09.2010 в 13:53)
| | Видимо я недостаточно точно описал ситуацию. вхождений xxx со скобками может быть сколько угодно и скобки могут стоять от xxx на \s* пробелов. | |
|
|
|
|
|
|
|
для: Qtilla
(23.09.2010 в 10:56)
| | как заменяется при встречающихся xxx() более или менее двух раз ? | |
|
|
|
|
|
|
|
для: heed
(23.09.2010 в 13:57)
| | не понял вопроса | |
|
|
|
|
|
|
|
для: Qtilla
(23.09.2010 в 14:34)
| | >вхождений xxx со скобками может быть сколько угодно
видимо да.
<?php
header('content-type: text/plain');
$txt ='= zzzz xxx() zzz
zzz xxx() zzzz
= zzzz xxx() zzz= zzzz xxx() zzz= zzzz xxx() zzz
zzz
= xxx
()
.';
echo preg_replace('#((?:\G|^=).*?)\bxxx\s*\(\)#m', '$1_abc_', $txt);
|
| |
|
|
|
|
|
|
|
для: heed
(23.09.2010 в 17:58)
| | Спасибо! Так и думал что где то надо \G использовать.. А не затруднит объяснить как это работает? | |
|
|
|
|
|
|
|
для: Qtilla
(24.09.2010 в 06:26)
| | если по буквам
\G - если после предыдущего совпадения не сдвинулся курсор или начало текста
^= - (c модификатором /m) начало строки после которого =
.*? - перебор по одному символу с заглядыванием не идёт-ли дальше \bxxx\s*\(\)
//кстати с \G может быть трабла , потому- что "или начало текста" | |
|
|
|