[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: А как найти '#<strong>(^</strong>*)<strong>#isU'
yuriy
Добрый день (или вечер)!
Не подскажите как найти минимальную строку между двумя соседними тегами <strong>, но так, чтобы между ними не было закрывающего тега </strong>?



Спустя 2 минуты, 17 секунд (1.12.2011 - 15:44) Winston написал(а):
Что значит минимальную? Самую короткую ?

Спустя 1 минута, 53 секунды (1.12.2011 - 15:46) yuriy написал(а):
Да, самую короткую.
Вот эту: '#<strong>(^</strong>*)<strong>#isU'

Спустя 8 минут, 42 секунды (1.12.2011 - 15:54) Winston написал(а):
Так ?
$str = '<strong>Hello world, Where is you?</strong>';
preg_match_all("#<strong>(.*)</strong>#isuU", $str, $match);
$short = explode(' ', $match[1][0]);
$lens = array_map(create_function('$item', 'return mb_strlen($item, "UTF-8");'), $short);
$index = array_keys($lens, min($lens));
echo $short[$index[0]];

Спустя 55 секунд (1.12.2011 - 15:55) yuriy написал(а):
Под символом ^ имеется в виду отрицание, а не начало строки.

Спустя 5 минут, 34 секунды (1.12.2011 - 16:01) Winston написал(а):
Цитата (yuriy @ 1.12.2011 - 14:55)
Под символом ^ имеется в виду отрицание, а не начало строки.

Я знаю, а разве отрицание работает в группировке? smile.gif В символьном классе то да, а здесь? В таком случае нужен негативный просмотр вперед (?!xxx)
Цитата (yuriy @ 1.12.2011 - 14:46)
>*

И нафига ты размножаешь знак больше? smile.gif

Спустя 3 минуты, 45 секунд (1.12.2011 - 16:05) Winston написал(а):
Цитата (yuriy @ 1.12.2011 - 14:46)
Да, самую короткую.

Блин, так строку или слово минимальное ?

Спустя 10 минут, 10 секунд (1.12.2011 - 16:15) yuriy написал(а):
Чёт ахинею ты какую-то написал.
Нужно всего-навсего найти в строке все строки между тегами <strong>. При этом между тегами <strong> (в искомой строке) нет '<strong>' (минимальность строки) и '</strong>'.

Спустя 46 секунд (1.12.2011 - 16:15) yuriy написал(а):
от эту: '#<strong>(^</strong>*)<strong>#isU'

Спустя 1 минута, 37 секунд (1.12.2011 - 16:17) yuriy написал(а):
Найти все минимальные строки '#<strong>(.*)<strong>#isU', но с условием, что ещё в (.*) нет '</strong>'.

Спустя 1 минута, 19 секунд (1.12.2011 - 16:18) Winston написал(а):
Цитата (yuriy @ 1.12.2011 - 15:15)
Чёт ахинею ты какую-то написал

Какой вопрос - такой ответ.

Дай мне строку в которой ты ищешь и, что должно найти - покажи !

Спустя 5 минут, 22 секунды (1.12.2011 - 16:24) yuriy написал(а):
'дядя Вася <strong>пошёл за <strong>молоком, а <strong>молоко</strong> убежало</strong></strong>'

Искомые строки тут:
1. пошёл за ;
2. молоком, а ;

Спустя 2 минуты, 40 секунд (1.12.2011 - 16:26) yuriy написал(а):
'дядя Вася <strong>пошёл за <strong>молоком, а <strong>молоко</strong> <strong>убежало</strong></strong>'

Искомые строки тут:
1. пошёл за ;
2. молоком, а ;

Строка 'молоко</strong> ' - не подходит, так как тут есть '</strong>'

Спустя 10 минут, 58 секунд (1.12.2011 - 16:37) Игорь_Vasinsky написал(а):
Цитата
Чёт ахинею ты какую-то написал

Winston
И ты ещё в топике? добрейший души человек

PS как мне нравиться как ты умело с create_function шустришь. прям завидую.

Спустя 2 минуты, 34 секунды (1.12.2011 - 16:40) yuriy написал(а):
Да, Winston, извини, погорячился. Ну это я так, шутя, конечно. Но это не то, что нужно.

Спустя 13 минут, 54 секунды (1.12.2011 - 16:54) Winston написал(а):
Попробуй
$str = 'дядя Вася <strong>пошёл за <strong>молоком, а <strong>лоло</strong> убежало</strong></strong>';
preg_match_all("#(<strong>[^</>]+<strong>|(?<=<strong>).*<strong>)#isuU" , $str, $match);
echo '<pre>'.strip_tags(print_r($match, 1)).'</pre>';

Спустя 19 минут, 3 секунды (1.12.2011 - 17:13) yuriy написал(а):
В паттерн '(?<=<strong>).*<strong>' может же попасть </strong>. Зачем ещё эта добавка? Иля я что-то путаю?

Спустя 12 минут, 16 секунд (1.12.2011 - 17:25) yuriy написал(а):
Вообще, задача шире стоит немного. Финт с '[^</>]+' не проходит тоже, к сожалению.
Вот есть код:


$str = 'sdfj sdflkjsdkf sdlfjlksd asd kllk; cdf fdsj fdlkgjlfdk lksdjfksd dsfdsf';

$beginWord = 'asd';
$endWord = 'cdf';

$pattern_1 = '#' . $beginWord . '(.*)' . $beginWord . '#isU';
$pattern_2 = '#' . $endWord . '(.*)' . $endWord . '#isU';

preg_match_all($pattern_1, $str, $arrResult_1, PREG_PATTERN_ORDER);
preg_match_all($pattern_2, $str, $arrResult_2, PREG_PATTERN_ORDER);



Нужно, чтобы элементы $arrResult_1[1] и $arrResult_1[2] состояли из элементов в которых нет $endWord и $beginWord соответственно.

Спустя 1 минута, 13 секунд (1.12.2011 - 17:26) yuriy написал(а):
Но сделать это нужно только через регулярку.

Спустя 7 минут, 22 секунды (1.12.2011 - 17:34) yuriy написал(а):
Ой, извиняюсь, не $arrResult_1[1] и $arrResult_1[2], а $arrResult_1[1] и $arrResult_2[1]


_____________
void x;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.