Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Убрать инфу из скобок


Автор: Gold Dragon 28.11.2005, 12:57
Помогите составить запрос. Мне нужно убрать в конце строки скобки с всё что вних,

т.е. от строки "Какаду (1)" оставить "Какаду", в скрбках могут быть цифры и пробел

Автор: IZ@TOP 28.11.2005, 13:06
Думаю такой вариант должен сработать. Но не проверял.
Код

$str = preg_replace("|(\(\s*([0-9]*)\s*\))|s", $str);

Автор: Gold Dragon 28.11.2005, 13:36
что-то ошибку даёт
Цитата
Warning: Wrong parameter count for preg_replace() in C:\soft\PHP Expert Editor\php167.tmp on line 12



и ещё.. мне ещё нужно значение в скобках

Автор: PARROT 28.11.2005, 14:16
так пробуй:
Код

$str = preg_replace("|(\(\s*([0-9]*)\s*\))|s",'', $str);

Автор: Gold Dragon 28.11.2005, 14:21
PARROT спасибо smile вроде работает

осталось это
Цитата(Red @ 28.11.2005, 13:36)
мне ещё нужно значение в скобках

Автор: -=Ustas=- 28.11.2005, 14:29
Ну тут уже вызывать перед preg_replace:
Код

$str = preg_match("|(\(\s*([0-9]*)\s*\))|s", $str, $matches);

в $matches и будет это значение.

Автор: Gold Dragon 28.11.2005, 14:39
Что-то я не понял, $matches возвращается массивом. И какое значени где содержиться, мне нужно в данном примере получить единицу

Автор: -=Ustas=- 28.11.2005, 14:42
По-моему в $matches[1] будет оно самое.

Автор: Darhazer 28.11.2005, 14:46
Код
print_r($matches)

и увидеш ;)
А в принципе, будет в [0][0] - а если в в строке несколько (x) - то соответсвено в [0][0], [0][1], [0][2] и т.д.

Автор: sergejzr 28.11.2005, 14:51
а вот так:?
Код

class Test
{
  function replaceMyString($str) 
  {    
   $str = preg_replace( "#|(\(\s*([0-9]*)\s*\))|s#e"  , "\$this->getSkobki('\\1')", $str);
  }
  function getSkobki($str)
  {
    //делаем с внутренностями что хотим и возвращаем на что заменить их
    return ''; 
  }
}

Какие преимущества/недостатки у данного варианта? Я его всегда использую, потому что он универсальный.

Автор: IZ@TOP 28.11.2005, 15:16
sergej.z, хм... смотря что он собирается делать с данными.

Сорьки, я сначало понял что ты хочешь просто убрать скобки и то что в них.
Код


$str="какаду (1)";
$str = preg_match("|([^\(]+)\s*\(\s*([0-9]*)\s*\)|s", $str, $matches);
print_r($matches);


Цитата
Array ( [0] => какаду (1) [1] => какаду [2] => 1 )

Автор: Gold Dragon 28.11.2005, 15:22
всё отлично работает, всем спасибо!!

-=Ustas=-
только само значение в $matches[2]

Автор: -=Ustas=- 28.11.2005, 15:26
Red Dragon, ну..., человеку свойственно ошибаться... smile

Автор: Gold Dragon 28.11.2005, 15:28

Чтобы было ясно, я делаю сайт, где будут храниться сведения о кабаках. Но в наше не совершенное время могут встречаться одинаковые названия. И тут возникают вопросы как один кабак отличить от другого? По адресу.. Вот я и сделал так

- Какаду (1)
- Какаду (2)
- и так далее

Но юзеру эта служебная информация не нужна, вот я и обрубаю её при выводе... а если появляется ещё одно заведение с такимже названием, то просто увеличиваю значение в скобках

В общем вот код, который я использую
Код

function f_reg_name($name){
    $name = trim(preg_replace("|(\(\s*([0-9]*)\s*\))|s", "", $name));
    return $name;
}

function f_reg_name_var($name){
    $name = preg_match("|(\(\s*([0-9]*)\s*\))|s", $name, $matches);
    return $matches[2];
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)