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

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

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

 

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

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

тема: Строка в перменные
 
 автор: legio2net   (24.02.2011 в 14:08)   письмо автору
 
 

как следущее делается?

Строка "gorod_kazan" должно заносится в переменные $par1=gorod; $par2=kazan;
даже если будет такое "gorod_kazan_2" в переменные $par1=gorod; $par2=kazan_2;
ну а если строка просто "gorod" то $par1=gorod; $par2="";

  Ответить  
 
 автор: SHAman   (24.02.2011 в 14:51)   письмо автору
 
   для: legio2net   (24.02.2011 в 14:08)
 

preg_match("/^([^_]+)-?(.*)$/", $text, $match);
print_r($match);

  Ответить  
 
 автор: cheops   (24.02.2011 в 14:55)   письмо автору
 
   для: legio2net   (24.02.2011 в 14:08)
 

Можно поступить следующим образом
<?php
  $text 
"gorod";
  
$pattern "|^([^_]+)[_]*(.*?)$|is";
  
preg_match($pattern$text$out);
  
$par1 $out[1];
  
$par2 $out[2];
  echo 
$par1."<br>";
  echo 
$par2."<br>";
?>

  Ответить  
 
 автор: Deed   (24.02.2011 в 15:44)   письмо автору
 
   для: legio2net   (24.02.2011 в 14:08)
 

Тут нужно использовать элементарный explode("_",...)

  Ответить  
 
 автор: cheops   (24.02.2011 в 16:00)   письмо автору
 
   для: Deed   (24.02.2011 в 15:44)
 

Не пойдет, по второму символу _ тоже пойдет разбиение, а в условии сказано, что эта часть должна отойти второму слову.

  Ответить  
 
 автор: Trianon   (24.02.2011 в 16:01)   письмо автору
 
   для: cheops   (24.02.2011 в 16:00)
 

у explode() есть limit-параметр, который ограничивает процесс разбиения. Если указать в нем 2 , то больше двух элементов создано не будет, и в последний войдет весь оставшийся хвост. Что в целом условиям задачи отвечает.

Правда, если разделителя _ нет вообще (как по последней части условия) , то второй элемент массива создан не будет.
А значит придется вводить для второй переменной отдельный код. Или хотя бы блокировку диагностики.

Как-то так:
<? 
$pair 
explode('_'$text2);
$par1 =  $pair[0];
$par2 = @$pair[1];


или так:
<? 
@list($par1,$par2) = explode('_'$text2);

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

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