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

Форум PHP

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

 

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

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

тема: как определить тег, внутри которого находится слово
 
 автор: ren   (14.05.2009 в 12:20)   письмо автору
 
 

Дорброго всем времени суток
есть строки

$str 1 = " чего то там <img какие то параметры $word чего то там еще какой то текст ";
$str 2 = " чего то там  <какой то тег> чего то там $word чего то там  еще какой то текст ";


известно - $word

как можно определить тег, внутри которого находится заданное слово, или определить, что слово не находится ни в каком теге?

  Ответить  
 
 автор: @@@   (14.05.2009 в 21:48)
 
   для: ren   (14.05.2009 в 12:20)
 

У вас плохие примеры, из которых мало что ясно.
"внутри" тега - это что? Внутри парного тега, где-то в атрибуте одиночного?

  Ответить  
 
 автор: ren   (14.05.2009 в 22:37)   письмо автору
 
   для: @@@   (14.05.2009 в 21:48)
 

Известно слово $word, нужно определить, какой ближайший тег от него слева, и находится ли это слово внутри него или нет

  Ответить  
 
 автор: @@@   (14.05.2009 в 23:04)
 
   для: ren   (14.05.2009 в 22:37)
 

я же спросил: что Вы имеете ввиду, когда говорите "внутри тега"?

  Ответить  
 
 автор: ren   (14.05.2009 в 23:28)   письмо автору
 
   для: @@@   (14.05.2009 в 23:04)
 

я имею ввиду что задача стоит так, известно слово в тексте, нужно определить самый ближайший тег слева от него, а также выяснить , закрыт этот тег слева от слова или не закрыт

  Ответить  
 
 автор: @@@   (15.05.2009 в 00:01)
 
   для: ren   (14.05.2009 в 23:28)
 

попробуй так
<?php

$str 
'чего то там <tag> </tag> какие то параметры $word чего то там еще какой то текст';
$word 'там';

$s = array();
$str_spl preg_split('/(<.*?>)/'$str, -1PREG_SPLIT_DELIM_CAPTURE);

for(
$i=0,$c ''$i<count($str_spl); $i++)
{
    if( 
$i&)
    {
        if ( 
substr($str_spl[$i], 11) == '/' )
            
array_pop($s);
        else if ( 
substr($str_spl[$i], -2, -1) != '/' )
            
array_push($s$c $str_spl[$i]);
    }
    else
    {
        if( 
strpos($str_spl[$i], $word) !== false )
        {
            if( empty(
$s) && $c == '' )
                echo 
'Слева от "' htmlspecialchars($word) . '" ничО нет''<br />';
            else if( empty(
$s) )
                echo 
'Слева от "' htmlspecialchars($word) . '" закрытый тег ' htmlspecialchars($c), '<br />';
            else
                echo 
'Слева от "' htmlspecialchars($word) . '" незакрытый тег ' htmlspecialchars($c), '<br />';                
        }
    }
}

?>


* текст должен быть с "правильными" тегами (иначе таблицу парных/непарных тегов надо иметь) и правильной вложенностью (иначе надо проверять это до добавления в стек нового тега).

  Ответить  
 
 автор: ren   (15.05.2009 в 00:11)   письмо автору
 
   для: @@@   (15.05.2009 в 00:01)
 

Попробовал, на вашем примере выдает сразу 2 вывода, хотя по должен быть только первый
Слева от "там" ничО нет
Слева от "там" закрытый тег <tag>

  Ответить  
 
 автор: @@@   (15.05.2009 в 00:12)
 
   для: ren   (15.05.2009 в 00:11)
 

Как это? В тексте два раза слова "там", в первом случае тегов слева вообще нет, во втором там слева всё закрыто.

  Ответить  
 
 автор: @@@   (15.05.2009 в 00:14)
 
   для: ren   (15.05.2009 в 00:11)
 

Вот, например, что ты считаешь должно быть, если такой текст:
$str = '<b><tag></tag> слово';
Должно выдать, что незакрытый <b> или что закрытый <tag>?

  Ответить  
 
 автор: ren   (15.05.2009 в 00:22)   письмо автору
 
   для: @@@   (15.05.2009 в 00:14)
 

должно выдать, что слева закрытый тег< tag>

все здорово, но вот с этим не работает :((

$str = '<p align="justify"><a href="текст"><img title="слово, текст" чего то там <tag> </tag> какие то параметры  чего то там еще какой то текст';
$word = 'слово';


по идее должно выдать - тег < img>

  Ответить  
 
 автор: @@@   (15.05.2009 в 00:36)
 
   для: ren   (15.05.2009 в 00:22)
 

Фигня в том, что вы меня не слушаете. Он не будет работать с невалидными строками вроде вашей. Тут тег <img вроде открывается, а Вы видите где скобочка ">" тега img?

Попробуйте это
<?php

$str 
'<p align="justify"><a href="текст"><img title="слово, текст"/> слово <tag> слово</tag></a></p> слово';
$word 'слово';

$s = array();
$str_spl preg_split('/(<.*?>)/'$str, -1PREG_SPLIT_DELIM_CAPTURE);

for(
$i=0,$c ''$i<count($str_spl); $i++)
{
    if( 
$i&)
    {
        if( 
strpos($str_spl[$i], $word) !== false )
        {
            if( empty(
$s) && $c == '' )
                echo 
'Слева от "' htmlspecialchars($word) . '" ничО нет, слово в теге 'htmlspecialchars($str_spl[$i]), '<br />';
            else if( empty(
$s) )
                echo 
'Слева от "' htmlspecialchars($word) . '" закрытый тег ',  htmlspecialchars($c), ', слово в теге ' htmlspecialchars($str_spl[$i]), '<br />';
            else
                echo 
'Слева от "' htmlspecialchars($word) . '" незакрытый тег ',  htmlspecialchars($c), ', слово в теге ' htmlspecialchars($str_spl[$i]), '<br />';            
        }

        if ( 
substr($str_spl[$i], 11) == '/' )
            
$c array_pop($s);
        else if ( 
substr($str_spl[$i], -2, -1) != '/' )
            
array_push($s$c $str_spl[$i]);
    }
    else
    {
        if( 
strpos($str_spl[$i], $word) !== false )
        {
            if( empty(
$s) && $c == '' )
                echo 
'Слева от "' htmlspecialchars($word) . '" ничО нет''<br />';
            else if( empty(
$s) )
                echo 
'Слева от "' htmlspecialchars($word) . '" закрытый тег ' htmlspecialchars($c), '<br />';
            else
                echo 
'Слева от "' htmlspecialchars($word) . '" незакрытый тег ' htmlspecialchars($c), '<br />';                
        }
    }
}

?>


У меня выдает

Слева от "слово" незакрытый тег <a href="текст">, слово в теге <img title="слово, текст"/>
Слева от "слово" незакрытый тег <a href="текст">
Слева от "слово" незакрытый тег <tag>
Слева от "слово" закрытый тег <p align="justify">

  Ответить  
 
 автор: ren   (15.05.2009 в 00:43)   письмо автору
 
   для: @@@   (15.05.2009 в 00:36)
 

то, что нужно, спасибо, Вам, большущее !

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

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