preg_match_all - помогите разобраться

kvf77

Red Devil
sage

Это не лишняя строка кода - я думаю, что специализированная команда побыстрее отработает чем регулярка.
 

mac

Guest
Автор оригинала: sage
приведи код, при котором вылавливает только первый символ "текста ссылки" - исправим
тебе привести кусок html-кода или кусок, которым я отлавливаю нужную инфу - я просто не понял
 

mac

Guest
Автор оригинала: sage
кусок html-кода
-<a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a><br>
-<a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a><br>
<a class=n href="ссылка">nbsp;<b>текст ссылки</b></a><br>
<a class=n href="ссылка">nbsp;<b>текст ссылки</b></a><br>
-<a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a><br>
 

sage

Новичок
всё понятно. получается сл:
Код:
Array
(
    [0] => Array
        (
            [0] => <a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a><br>
-<a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a><br>
<a class=n href="ссылка">nbsp;<b>текст ссылки</b></a>
            [1] => ссылка
            [2] => текст ссылки
        )

    [1] => Array
        (
            [0] => <a class=n href="ссылка">nbsp;<b>текст ссылки</b></a>
            [1] => ссылка
            [2] => текст ссылки
        )

    [2] => Array
        (
            [0] => <a class=n href="ссылка">nbsp;nbsp;nbsp;текст ссылки</a>
            [1] => ссылка
            [2] => текст ссылки
        )

)
И это естественно. Т.к. у нас стоит модификатор s, то .*?<b> совпадает со всем текстом до первого <b>. А где у нас первый <b>? В 3 строчке, поэтому array[0][0] - это первые три строчки. Самое простое решение - убрать модификатор s

-~{}~ 18.06.05 10:14:

или изменить в выражении .*?<b> на [^<]*?<b>, оставив при этом модификатор s
 

mac

Guest
спасибо всем за помощь...
сам помозговал немного и все получилось

preg_match_all("#<a class=n href=\"(.*)\">([&amp;nbsp;<b>]{5,18}+|[&amp;nbsp;][&amp;nbsp;]{5,18})(.*)<(.*)><br>#Usi", $first, $third_step);
 

sage

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

mac

Guest
Автор оригинала: sage
неа, ничего у тебя не получилось. твоё выражение - бездумный набор символов...
:D, ну как же не получилось....
я бы тогда не приводил этот код...
все прекрасно отлавливается
print_r($third_step[3]); - выдает чистые "тексты ссылки"
 

SelenIT

IT-лунатик :)
mac
Срочно читай, что в регулярках делают круглые скобки, а что - квадратные. Судя по твоему коду, ты до сих пор не понял разницы...
 

mac

Guest
руководствовался вот этим:
http://detail.phpclub.ru/article/regexp_1
там в разделе "Запомнить все" (в последнем абзаце) как раз приведен подобный пример

мне удобнее было запоминать каждое из вхождений в массив, а потом по индексу массива вытащить то, что нужно...

может у меня просто подход не правильный? поясните...
 

SelenIT

IT-лунатик :)
mac
Что, по-твоему, должна означать эта запись?
По идее, это от 5 до 18 любых символов из набора '&', 'n', 'b', 's', 'p', ';', '<', '>', после которых идет символ '+'?
 

sage

Новичок
mac
неправильный. надо запоминать то, что нужно, а не всё подряд.
 
Сверху