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

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

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

 

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

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

тема: заменить цифру на слово везде, кроме тэгов
 
 автор: а-я   (16.09.2009 в 03:25)   письмо автору
 
 

допустим, есть строка


020200200 <value="0fdx"> 34505344


как мне заменить все 0 на 'ноль', только чтоб регулярка не трогала <value="0fdx">

чтоб получилось:

ноль2ноль2нольноль2нольноль <value="0fdx"> 345ноль5344

  Ответить  
 
 автор: cheops   (16.09.2009 в 12:35)   письмо автору
 
   для: а-я   (16.09.2009 в 03:25)
 

Тэги встречаются только вида <value="0fdx">? других не будет?

  Ответить  
 
 автор: а-я   (16.09.2009 в 13:41)   письмо автору
 
   для: cheops   (16.09.2009 в 12:35)
 

другие тэги есть, но мне только в этом НЕ надо заменять.

  Ответить  
 
 автор: cheops   (16.09.2009 в 13:48)   письмо автору
 
   для: а-я   (16.09.2009 в 13:41)
 

Т.е. везде, кроме этого тэга?

  Ответить  
 
 автор: а-я   (16.09.2009 в 14:55)   письмо автору
 
   для: cheops   (16.09.2009 в 13:48)
 

да... именно так.

  Ответить  
 
 автор: cheops   (16.09.2009 в 15:09)   письмо автору
 
   для: а-я   (16.09.2009 в 03:25)
 

Можно попробовать следующее регулярное выражение
<?php
  $text 
'020200200 <value="0fdx"> 34505344';
  
$pattern "|(?<!\<value=\")([\d\w]*?)(0)([\d\w]*?)(?!\")|is";
  
$text preg_replace($pattern"\\1ноль\\3"$text);
  echo 
htmlspecialchars($text);
?>

  Ответить  
 
 автор: а-я   (16.09.2009 в 15:34)   письмо автору
 
   для: cheops   (16.09.2009 в 15:09)
 

спасибо =) вроде работает без проблем.

а если строка будет вида

$
<postfield name="type" value="$(type1615)"/>
$


т.е. нельзя трогать в тэги postfield в значении value?

  Ответить  
 
 автор: cheops   (16.09.2009 в 15:37)   письмо автору
 
   для: а-я   (16.09.2009 в 15:34)
 

Тогда регулярное выражение нужно будет немного модифицировать
<?php 
  $text 
'020200200 <value="0fdx"> 34505344'
  
$pattern "|(?<!\<value=\")([\d\w\$\(]*?)(0)([\d\w\)]*?)(?!\")|is"
  
$text preg_replace($pattern"\\1ноль\\3"$text); 
  echo 
htmlspecialchars($text); 
?>

  Ответить  
 
 автор: а-я   (16.09.2009 в 15:48)   письмо автору
 
   для: cheops   (16.09.2009 в 15:37)
 

что-то понять не могу...

данный момент реализовал таким образом:

<?
  $text 
'$4567$ <postfield name="type" value="$(type1615)"/> $sdfgs'
  
  
$text str_replace('$''$$'$text);

  
$pattern '|<postfield name="(.*?)" value="\$\$(.*?)"/>|uis'

  
$text preg_replace($pattern'<postfield name="\\1" value="$\\2"/>'$text);
    
  echo 
htmlspecialchars($text);
?>


только в данном случаи меняем $ на $$, все работает, но можно как то упростить.
как в 1ом случаи?

  Ответить  
 
 автор: cheops   (16.09.2009 в 15:58)   письмо автору
 
   для: а-я   (16.09.2009 в 15:48)
 

Не понятно. У вас символы доллара удваиваются без всякой выгоды
$$4567$$ <postfield name="type" value="$(type1615)"/> $$sdfgs

Это то что вы хотели получить?

  Ответить  
 
 автор: а-я   (16.09.2009 в 17:01)   письмо автору
 
   для: cheops   (16.09.2009 в 15:58)
 

да! =) именно это мне и надо!

  Ответить  
 
 автор: а-я   (17.09.2009 в 02:42)   письмо автору
 
   для: а-я   (16.09.2009 в 17:01)
 

никто не знает?

  Ответить  
 
 автор: cheops   (17.09.2009 в 10:27)   письмо автору
 
   для: а-я   (17.09.2009 в 02:42)
 

>ноль2ноль2нольноль2нольноль <value="0fdx"> 345ноль5344
>$$4567$$ <postfield name="type" value="$(type1615)"/> $$sdfgs
>да! =) именно это мне и надо!
>никто не знает?
На самом деле немного сложно понять, что вам требуется. Это один вопрос или два?

  Ответить  
 
 автор: а-я   (17.09.2009 в 18:03)   письмо автору
 
   для: cheops   (17.09.2009 в 10:27)
 

>>ноль2ноль2нольноль2нольноль <value="0fdx"> 345ноль5344
>>$$4567$$ <postfield name="type" value="$(type1615)"/> $$sdfgs
>>да! =) именно это мне и надо!
>>никто не знает?
>На самом деле немного сложно понять, что вам требуется. Это один вопрос или два?


да, извините. это уже другой вопрос, но по теме.
надо из

$4567$ <postfield name="type" value="$(type1615)"/> $sdfgs

сделать

$$4567$$ <postfield name="type" value="$(type1615)"/> $$sdfgs


просто необходимо использовать wml-разметку.. знаю, что она уже устарела, но так надо.

в этой разметке можно использовать переменные, $var -> $$var - чтоб получить текст, а не переменную.

решил использовать буфер, и перед отдачей заменить все $ на $$,
кроме тех что в тэге <postfield>

  Ответить  
 
 автор: cheops   (18.09.2009 в 08:15)   письмо автору
 
   для: а-я   (17.09.2009 в 18:03)
 

Можно поступить следующим образом
<?php  
  $text 
'$4567$ <postfield name="type" value="$(type1615)"/> $sdfgs';  
  
$pattern '|(?<!value=")\$|is';  
  
$text preg_replace($pattern"\$\$"$text);  
  echo 
htmlspecialchars($text);  
?>

PS Под новые вопросы все-таки лучше заводить новые темы.

  Ответить  
 
 автор: а-я   (19.09.2009 в 05:45)   письмо автору
 
   для: cheops   (18.09.2009 в 08:15)
 

Благодарю! Это то что надо!! =)


>PS Под новые вопросы все-таки лучше заводить новые темы.

хорошо.. учту =)

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

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