|
|
|
| Дорброго всем времени суток
есть строки
$str 1 = " чего то там <img какие то параметры $word чего то там еще какой то текст ";
$str 2 = " чего то там <какой то тег> чего то там $word чего то там еще какой то текст ";
|
известно - $word
как можно определить тег, внутри которого находится заданное слово, или определить, что слово не находится ни в каком теге? | |
|
|
|
|
автор: @@@ (14.05.2009 в 21:48) |
|
|
для: ren
(14.05.2009 в 12:20)
| | У вас плохие примеры, из которых мало что ясно.
"внутри" тега - это что? Внутри парного тега, где-то в атрибуте одиночного? | |
|
|
|
|
|
|
|
для: @@@
(14.05.2009 в 21:48)
| | Известно слово $word, нужно определить, какой ближайший тег от него слева, и находится ли это слово внутри него или нет | |
|
|
|
|
автор: @@@ (14.05.2009 в 23:04) |
|
|
для: ren
(14.05.2009 в 22:37)
| | я же спросил: что Вы имеете ввиду, когда говорите "внутри тега"? | |
|
|
|
|
|
|
|
для: @@@
(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, -1, PREG_SPLIT_DELIM_CAPTURE);
for($i=0,$c = ''; $i<count($str_spl); $i++)
{
if( $i&1 )
{
if ( substr($str_spl[$i], 1, 1) == '/' )
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 />';
}
}
}
?>
|
* текст должен быть с "правильными" тегами (иначе таблицу парных/непарных тегов надо иметь) и правильной вложенностью (иначе надо проверять это до добавления в стек нового тега). | |
|
|
|
|
|
|
|
для: @@@
(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>? | |
|
|
|
|
|
|
|
для: @@@
(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, -1, PREG_SPLIT_DELIM_CAPTURE);
for($i=0,$c = ''; $i<count($str_spl); $i++)
{
if( $i&1 )
{
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], 1, 1) == '/' )
$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"> | |
|
|
|
|
|
|
|
для: @@@
(15.05.2009 в 00:36)
| | то, что нужно, спасибо, Вам, большущее ! | |
|
|
|