Помогите разэксплодить строку

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

mess

Новичок
Помогите разэксплодить строку

Есть например такая строка с жанрами и поджанрами.

Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime

Нужно вытащить из этой строки жанры и поджанры. Если бы в скобках поджнры тоже не разделялись слешем /, то это было бы легко. Но так, не получается что-то. Помогите пожалуйста.
 

Фанат

oncle terrible
Команда форума
головой надо было думать, когда имплодил.
выбери другой символ для разделения - например табуляцию
 

KaYSer

Новичок
мда... символ уникальный выбрал
регулярками теперь
 

arhangel

Новичок
попробуй
PHP:
$st = "Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime";
for (int $i=0; $i<strlen($st), $i++)
  if ($st[$i]=='//') $st[$i]=[любой другой символ];
// дальше разбиваешь строку по [любой другой символ]
 

Фанат

oncle terrible
Команда форума
на форуме появился очередной гений программирования
 

mess

Новичок
имплодил не я :)

-~{}~ 05.06.07 12:30:

rchangel не понял смысла такого разбивания. А не одно ли это и то же что проэксплодить по /?
 

softm39

Новичок
Re: Помогите разэксплодить строку

Автор оригинала: mess
Есть например такая строка с жанрами и поджанрами.

Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime

Нужно вытащить из этой строки жанры и поджанры. Если бы в скобках поджнры тоже не разделялись слешем /, то это было бы легко. Но так, не получается что-то. Помогите пожалуйста.
Я бы вначале регэекспом (\(.*)/(.*\)) поменял на \\1|\\2 а дальше уже бы эксплодил.
Удачи!
 

mess

Новичок
Фанат с табуляцие тоже не прокатит, есть жанры из нескольких слов :(

-~{}~ 05.06.07 12:35:

softm39 можешь вкратце пояснить конструкцию? я не силен в регэкспах :)
 

softm39

Новичок
Автор оригинала: mess
Фанат с табуляцие тоже не прокатит, есть жанры из нескольких слов :(

-~{}~ 05.06.07 12:35:

softm39 можешь вкратце пояснить конструкцию? я не силен в регэкспах :)
Это ты уже понял:
1. $str = preg_replace( ...,$str )
2. explode( $str, "|")

Теперь регэксп


Менять все, что начинается с скобки, заканчивается скобкой и содержит внутри /


preg_replace( "~(\(.*?)/(.*?\))~msi", "\\1|\\2" );

Но вообще оно по идее может быть и намного сложней, если у тебя в скобках (А/B/C) то тут уже прийдется разбивать более интересным способом :) а именно регэксп разбивкой ... По правилу: "внутри строки не может быть /".
 

mess

Новичок
да вот кстати есть и больше 2х поджанров в скобках :) я уже думал strpos и substr вырезать скобки и к ним прилегающее, т.е. родителя. и когда повырезать все скобки, то уже остальное эксплодить :) вот проблемка же...
 

softm39

Новичок
Автор оригинала: mess
да вот кстати есть и больше 2х поджанров в скобках :) я уже думал strpos и substr вырезать скобки и к ним прилегающее, т.е. родителя. и когда повырезать все скобки, то уже остальное эксплодить :) вот проблемка же...
Это не проблема. Меняй все что не внутри скобок и / на |. Можно и линейным перебором кстати.

1. Ищем открытую скобку
2. Пока нету ... меняем / на |
3. Нашел открытую скобку - перестаю менять ...



И так далее. А потом просто по | разбиваеш.
Задача элементарная. если она ставит в тупик - советую выпить кофе, подумать еще раз и изучить регэкспы.
 

Фанат

oncle terrible
Команда форума
Фанат с табуляцие тоже не прокатит, есть жанры из нескольких слов
НУ И ЧТО?!
Слова, вообще-то, разделяются не таблуляцией, а пробелами!

И вообще, ты ведь эту строку из базы берешь?

-~{}~ 05.06.07 12:53:

softm39
тебе не приходило в голову, что лучше вылечить ногу, чем помогать хромому смастырить костыли покрасивее?
 

softm39

Новичок
PHP:
<?

 $str = "Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime";
 $res = "";
 $fl = false;
 for ( $i=0; $i<strlen( $str); $i++ )
 {
    $s=substr($str,$i,1);

    if ( $s == "(" )
        $fl = true;

    if ( $s == ")" )
        $fl = false;

    if ( $s== "/" && $fl )
            $res .= "|";
      else
          $res   .=  $s;

 }

 $a = explode( "/", $res );
 print_r ( $a );


?>
дает

Array
(
[0] => Adventure
[1] => Horror (Trash | Thriller)
[2] => Comedy
[3] => Dramma
[4] => Anime
)

Успехов.
 

Фанат

oncle terrible
Команда форума
я уже побил скорость.
задолго до твоего ответа
explode("\t")
а ты мало того, что не прочел, и влез со свими дурацкими кодам, так и до сих пор продолжаешь гнать пургу.

лечить надо не кашель, а воспаление легких.
 

mess

Новичок
softm Спасибо огромное :)
Фанат, мне нужно простое решение проблемы. И софту огромнейшее спасибо за это :)
 

softm39

Новичок
PHP:
<?

 $str = "Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime";
 $a =explode("\t", $str ) ;
 print_r ( $a );


?>
Дает на выходе:

Array
(
[0] => Adventure / Horror (Trash / Thriller) / Comedy / Dramma / Anime
)


Если я чтото упустил, покажите пожалуйста :)

-~{}~ 05.06.07 13:06:

Автор оригинала: mess
softm Спасибо огромное :)
Фанат, мне нужно простое решение проблемы. И софту огромнейшее спасибо за это :)
Да, не за, что. Успехов.
 

Активист

Активист
Команда форума
softm39
Фаната поддерживаю =) не стоит писать таких алгоритмов

mess
>Фанат с табуляцие тоже не прокатит, есть жанры из нескольких
>слов
У тебя жанры через табулящию пишутся?

Когда имплодишь нужно имплодить/эксплодить через символ \t
На крайний случай, можешь заюзать спец символы, типа \x07 или еще что-то.
Примечание (для особо одаренных): пробел (код 20h) не есть символ табуляции (код 9h);
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху