Правельно ли сделал регулярное выражение

Статус
В этой теме нельзя размещать новые ответы.

Kostya\spb

Новичок
Автор оригинала: uchenik
PHP:
preg_replace('/@([^@]+)@/es', "\$\\1", $text);
Спасибо щас попробую!

-~{}~ 01.07.05 14:29:

Автор оригинала: specialist
ну а в документации пример посмотреть?
Я те примеры уже видел много раз. А как из него сделать то что мне надо незнаю.
 

uchenik

Новичок
Только могут возникнуть сбои если в тексте будут "левые" собаки. Поэтому, если использовать эту регулярку ограничители должны быть более уникальными, чтобы случайным образом не попадатся в тексте.

-~{}~ 01.07.05 13:31:

PHP:
надежней будет так:

preg_replace('/@(\w+)@/es', "\$\\1", $text);
 

P.Anton

Новичок
Лови код.
<?php
$sCountry = "России";
$sBububu = "!";
$sName = "Вовка Путин";
$sText = "@sName@ - президент @sCountry@ @sBububu@";

echo $sText."<hr>";
preg_match_all('|@([^@]+)@|i', $sText, $arrMatches);
for ($iI=0;$iI<count($arrMatches[1]);$iI++) {
$sText = str_replace("@".$arrMatches[1][$iI]."@",$$arrMatches[1][$iI],$sText);
}
echo $sText;

?>
 

specialist

Guest
PHP:
/////////////////////////////////////////////////////////////////
$time1= microtime();
$sCountry = "России";
$sBububu = "!";
$sName = "Вовка Путин";
$sText = "@sName@ - президент @sCountry@ @sBububu@";
preg_match_all('|@([^@]+)@|i', $sText, $arrMatches);
for ($iI;$iI<count($arrMatches[1]);$iI++) {
$sText = str_replace("@".$arrMatches[1][$iI]."@",$$arrMatches[1][$iI],$sText);
}
echo $sText.'<br> TIME1: '.(microtime()-$time1).'<br>';

/////////////////////////////////////////////////////////////////
$time1= microtime();
$replaces['sCountry'] = 'России';
$replaces['sBububu'] = '!';
$replaces['sName'] = 'Вовка Путин';
$sText = "@sName@ - президент @sCountry@ @sBububu@";
foreach ($replaces as $k=>$v)
	$sText = str_replace('@'.$k.'@',$v,$sText);
echo $sText.'<br> TIME2: '.(microtime()-$time1).'<br>';
/////////////////////////////////////////////////////////////////
 

P.Anton

Новичок
Можно и так, но человек просил зачем-то брать значения из обычных переменных (не из массива). Хотя, я бы так и сделал, как у тебя. :)
 

netdog

net @
Правельно ли сделал регулярное выражение
неписать строчку
Толку то что ты даеш эти темы! Я их в документации тищу раз видел! Если бы я знал как написать то неспрашивал здеся ничего.
..чо пример не можеш привети!
..мне надо незнаю.
Наболело…
Автор, ты бы хоть через word свои мессаги пропускал, если уж так всё плохо. :eek:
 

sakon

П..и.н..ок
Kostyaspb
Из правил форума:
Как общаться в форуме:
.
.
3. Старайтесь избегать грамматических ошибок. Неприятно читать текст, в котором некоторые слова изменены до неузнаваемости;

Учитывай это....
 

Kostya\spb

Новичок
Автор оригинала: specialist
PHP:
/////////////////////////////////////////////////////////////////
$time1= microtime();
$sCountry = "России";
$sBububu = "!";
$sName = "Вовка Путин";
$sText = "@sName@ - президент @sCountry@ @sBububu@";
preg_match_all('|@([^@]+)@|i', $sText, $arrMatches);
for ($iI;$iI<count($arrMatches[1]);$iI++) {
$sText = str_replace("@".$arrMatches[1][$iI]."@",$$arrMatches[1][$iI],$sText);
}
echo $sText.'<br> TIME1: '.(microtime()-$time1).'<br>';

/////////////////////////////////////////////////////////////////
$time1= microtime();
$replaces['sCountry'] = 'России';
$replaces['sBububu'] = '!';
$replaces['sName'] = 'Вовка Путин';
$sText = "@sName@ - президент @sCountry@ @sBububu@";
foreach ($replaces as $k=>$v)
	$sText = str_replace('@'.$k.'@',$v,$sText);
echo $sText.'<br> TIME2: '.(microtime()-$time1).'<br>';
/////////////////////////////////////////////////////////////////
Ток мне надо чтобы текст брался не из обычной строки а из файла (проверка каждой строки файла). Соответствено уже вид будет другой у скрипта!
 

Kostya\spb

Новичок
хз

-~{}~ 01.07.05 18:36:

А так нормально сделано?

$filezzz="file.htm";
$mass['name']="Васек";
$mass['status']="ПыхПых";

$file=read_file($filezzz);

while(list($line,$string)=each($file))
{
$string=preg_replace('/@([^@]+)@/es', "\$mass['\\1']", $string);
echo $string;
}
 

uchenik

Новичок
лучше так:

PHP:
$string = file_get_contents('file.htm');

$string=preg_replace('/@(\w+)@/es', "\$mass['\\1']", $string);
echo $string;
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху