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

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

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Найти и заменить [№числа] [№_числа_], но с одним условием

Сообщения:  [1-6] 

 
 автор: Brothersssddsss   (09.03.2010 в 17:53)   письмо автору
 
   для: exp   (09.03.2010 в 16:42)
 

Спасибо огромное!!! Всё работает как надо!!

  Ответить  
 
 автор: exp   (09.03.2010 в 16:42)   письмо автору
 
   для: Brothersssddsss   (09.03.2010 в 15:53)
 

вроде есть и другие варианты

  Ответить  
 
 автор: .exp   (09.03.2010 в 16:39)
 
   для: Brothersssddsss   (09.03.2010 в 15:53)
 

придётся использовать условную подмаску (?(1)(?!”))
и наверное всётаки (?<=(“)|) вместо просто (“)? потомучто выражения стараются захватить как можно больше

тольео кавычки там какие-то странные

<pre><?php
$txt 
'[#1] – заменить
“[#2] – заменить
[#3]” – заменить
“[#4]” – не заменять
“ [#5] “ – заменить
“[#6] “ – заменить
'
;
echo 
preg_replace('~(?<=(“)|)\[\#(\d+)\](?(1)(?!”))~''[#_$2_]'$txt);

  Ответить  
 
 автор: Brothersssddsss   (09.03.2010 в 15:53)   письмо автору
 
   для: exp   (09.03.2010 в 13:38)
 

Ну где открывающая кавычка а где закрывающая проверять не надо так как если кавычка не стоит прям радом с символом [ или ] то значит надо заменять а если она стоит рядом с символом [ или ] то заменять не надо.

Например:

[#числа] – заменить
“[#числа] – заменить
[#числа]” – заменить
“[#числа]” – не заменять
“ [#числа] “ – заменить
“[#числа] “ – заменить

Если обе кавычки обязательно в плотную к символам [ и ] то заменять не надо.

Короче “[#числа]” – не надо заменять, всё остальное заменять.

  Ответить  
 
 автор: exp   (09.03.2010 в 13:38)   письмо автору
 
   для: Brothersssddsss   (09.03.2010 в 13:05)
 

одним выражением не решается.
Если икать просто [#\d+] то как будет определить какие из кавычек рядом открывающие а какие закрывающие .

или просто разбиение текста на то где надо заменять а где не надо
или прохождение каким-нибудь preg_replace_callback() с выражением типа '~\G(?:[^"]+|(")[^"]*"?)~'
где в callback-функции будет проверяться присутствие открывающей кавычки, и соответственно обрабатывать нужные блоки текста

  Ответить  
 
 автор: Brothersssddsss   (09.03.2010 в 13:05)   письмо автору
 
 

Помогите, пожалуйста, вот у нас есть текст, к примеру, такой:

adf[#числа]"sf swn [#числа] weep " [#числа] wejfp[#числа]wjfjw"[ числа]of w w "[# числа]" h qwe a г fig"[# числа]"er коу oge о к ке ку [#числа] "пврпа

в нём есть конструкции вида [#числа] так вот нужно все эти конструкции заменить на [#_числа_] т.е добавить перед числами нижнее подчёркивание, но те конструкции, которые с обеих сторон обрамлены двойными кавычками их заменять не надо.

То есть в нашем тексте должно остаться без изменения только 6, 7 конструкция.

  Ответить  

Сообщения:  [1-6] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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