Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Несколько совпадений в зависимости от первого символа
 
 автор: Qtilla   (23.09.2010 в 10:56)   письмо автору
 
 

Всем привет! Имеется строка
= blabla xxx( ) + blabla - xxx ( )

Нужно заменить оба вхождения xxx() вместе со скобочками (да, там разное количество пробелов) на abc. При условии, что вначале строки есть "=". С первым то не проблема справиться, а вот второй не хочет поддаваться.
Что посоветуете?
Заранее благодарю.

  Ответить  
 
 автор: Tonik992   (23.09.2010 в 13:53)   письмо автору
 
   для: 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 ( )"

  Ответить  
 
 автор: Qtilla   (23.09.2010 в 14:34)   письмо автору
 
   для: Tonik992   (23.09.2010 в 13:53)
 

Видимо я недостаточно точно описал ситуацию. вхождений xxx со скобками может быть сколько угодно и скобки могут стоять от xxx на \s* пробелов.

  Ответить  
 
 автор: heed   (23.09.2010 в 13:57)   письмо автору
 
   для: Qtilla   (23.09.2010 в 10:56)
 

как заменяется при встречающихся xxx() более или менее двух раз ?

  Ответить  
 
 автор: Qtilla   (23.09.2010 в 14:34)   письмо автору
 
   для: heed   (23.09.2010 в 13:57)
 

не понял вопроса

  Ответить  
 
 автор: heed   (23.09.2010 в 17:58)   письмо автору
 
   для: 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);

  Ответить  
 
 автор: Qtilla   (24.09.2010 в 06:26)   письмо автору
 
   для: heed   (23.09.2010 в 17:58)
 

Спасибо! Так и думал что где то надо \G использовать.. А не затруднит объяснить как это работает?

  Ответить  
 
 автор: heed   (24.09.2010 в 11:20)   письмо автору
 
   для: Qtilla   (24.09.2010 в 06:26)
 

если по буквам
\G - если после предыдущего совпадения не сдвинулся курсор или начало текста
^= - (c модификатором /m) начало строки после которого =
.*? - перебор по одному символу с заглядыванием не идёт-ли дальше \bxxx\s*\(\)


//кстати с \G может быть трабла , потому- что "или начало текста"

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования