[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Потеря третьего кармана
Quieteroks
Доброго времени суток.
Встал вопрос с тем, что третий карман в регулярке теряется.

Для теста беру простенькую строку:
$str = 'вхождение [h 1]заголовка[/h 1] в строку'


После чего мне нужно выловить три вхождения:
- до объявления заголовка
- заголовок
- после заголовка

Пробую делать так:
$test = preg_match('#(.*)(\[h1\].*\[\/h1\])(.*)#Ui', $str, $testar);


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

Результат почти как необходимо:
Array
(
[0] => вхождение [h 1]заголовка[/h 1]
[1] => вхождение
[2] => [h 1]заголовка[/h 1]
[3] =>
)


Карман найден, но содержимое потеряно... Что могло стать причиной?
ЗЫ: Пробелы между h и 1 для того чтоб заголовок не преобразовывался на форуме



Спустя 11 минут, 10 секунд (24.02.2012 - 22:33) inpost написал(а):
U - поиск не жадный, поэтому сразу обрывается.
(.*) - может быть символ, а может и не быть.
Не жадный поиск всегда будет искать наименьшее, итого от 0 до бесконечности от выберет - 0.
Карман есть, но в него идёт пустота.

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

.*? - это замена обычного .* , без модификатора U на не жадный поиск
Поэтому где ты ищешь не жадную строку, пиши .*? , не смотря на это там, где тебе нужен жадный, а это КОНЕЦ строки и последний карман - там просто .* без модификатора U

Спустя 30 секунд (24.02.2012 - 22:33) killer8080 написал(а):
$str = 'вхождение [h 1]заголовка[/h 1] в строку';
$test = preg_match('#(.*)(\[h1\].*\[\/h1\])(.*?)#Uius', $str, $testar);
echo '<pre>'.print_r($testar,1).'</pre>';

Спустя 44 секунды (24.02.2012 - 22:34) walerus написал(а):
$str = 'вхождение <H1>заголовка</H1> в строку';

preg_match( '~^(.*)<h1>(.*)</h1>(.*)$~iUsu', $str, $match );

print_r($match);

заголовок указывается в <> скобках, а не в [].

Спустя 1 минута, 1 секунда (24.02.2012 - 22:35) killer8080 написал(а):
Цитата (walerus @ 24.02.2012 - 21:34)
заголовок указывается в <> скобках, а не в [].

там наверно bb-code.

Спустя 1 минута (24.02.2012 - 22:36) inpost написал(а):
killer8080
.*? при не жадном поиске - идёт обратный эффект, делается жадным, правильно? Знал это, но что-то засомневался без тестов.

Спустя 1 минута, 49 секунд (24.02.2012 - 22:38) killer8080 написал(а):
Цитата (inpost @ 24.02.2012 - 21:36)
.*? при не жадном поиске - идёт обратный эффект, делается жадным, правильно?

совершенно верно smile.gif
--удалил--

Спустя 2 минуты, 34 секунды (24.02.2012 - 22:40) Quieteroks написал(а):
Оперативно. smile.gif
Всем спасибо.
Да, там действительно bb тег, а не тег.
Быстрый ответ:

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