Модераторы: Aliance, skyboy, MoLeX, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нахождение ссылки 
:(
    Опции темы
wwwdiz
Дата 10.7.2006, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 13.4.2006

Репутация: нет
Всего: 1



есть ссылка:

<a href=сайт.ru>текст ссылки</a>

Вопрос:

каким образом  корректнее обеспечить её нахождение  в каком-либо текстовом блоке,
через регулярные или сравнение строк? smile  
PM   Вверх
Bikutoru
Дата 10.7.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлекающийся
**


Профиль
Группа: Участник
Сообщений: 522
Регистрация: 24.5.2005
Где: Москва

Репутация: 3
Всего: 22



Через регулярные выражения, т.к. через простое сравнение получится намного более трудоемко (и скорее вего, менее понятно). Я бы сделал так:

Код

<?php

function getAttributesByRegexp($text, $regExp)
{
    $result = array ();
    if (preg_match_all($regExp, $text, $matches)) {
        foreach ($matches[0] as $k => $v) {
            $param = $matches[1][$k];
            $value = $matches[2][$k];
            $result[$param] = $value;
        }
    }                        
    
    return $result;    
}

function getAttributes($text) 
{
    $result = array ();
    $regArray = array (
        '/(\w+)=([^"\'\s]*)/is',
        '/(\w+)="([^"]*)"/is',
        '/(\w+)=\'([^\']*)\'/is',
    );
    
    foreach ($regArray as $curReg) {
        $result = array_merge($result, getAttributesByRegexp($text, $curReg));
    }
    
    return $result;
}
    
$text = '<a href="12" title=\'Test title\' alt=short-without-quotes>12</a><a href="1234" alt=\'Test\'>3412</a>';
if (preg_match_all('/<a([^>]+)>(.+?)<\/a>/is', $text, $matches)) {
    foreach ($matches[0] as $k => $v) {
        $linkData = getAttributes($matches[1][$k]);
        $linkData['text'] = $matches[2][$k];
        print_r($linkData);
    }
}

?>



И как результат:

Код

Array
(
    [href] => 12
    [title] => Test title
    [alt] => short-without-quotes
    [text] => 12
)
Array
(
    [href] => 1234
    [alt] => Test
    [text] => 3412
)


По-моему, так достаточно удобно.

 


--------------------
Человек, словно в зеркале мир — многолик, 
Он ничтожен — и он же безмерно велик!
Омар Хайям
PM   Вверх
wwwdiz
Дата 25.7.2006, 23:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 13.4.2006

Репутация: нет
Всего: 1



Bikutoru, а если .....

вот составил регулярное выражение, руководствуясь  http://vingrad.ru/PHP-ART-002378,
чувствую написал бред, но поясню что я этим хотел сказать.....

Код

^(<a\( )\s                #этим выражением хотел описать " <a " 
                               #правда запаметовал как в REGexp описывается пробел

(href=)+                  #хотел описать последавательность из "href="

\(\$ssil )\ws+      #м/ду "(" и "$" поставил "\" потому как хотел описать сам символ "$" (метод взял из "осей")

(title=)\(\$title )\ws+>)>)+\(\$text)\is+(<a>)+$     #ну а остальное состоит из подобного 

#$ssil, $title, $text - переменные содержащие текст 



Народ, в этом коде что-н правильное есть smile ?
 
PM   Вверх
SamDark
Дата 26.7.2006, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 4
Всего: 38



1. Нафига столько сохраняющих скобок(в твоём случае они вообще не нужны)? Если нужна группировка, используй (?:тут_регулярка)
2. Пробел описывается пробелом.
3. Переменные включать в регулярку лучше так $regexp = '~sdfsdfdsfd'.preg_quote($variable).'sdfsdfsfs~';
4. (href=)+ означает, что у тебя href= должно встретится один и более раз. Надо убрать скобки и +, т.е. просто href= 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
smartov
Дата 26.7.2006, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


свой собственный
****


Профиль
Группа: Экс. модератор
Сообщений: 4225
Регистрация: 2.2.2006
Где: NJ

Репутация: 4
Всего: 259



wwwdiz, тебе же соучаснег Bikutoru пример предоставил.
Там же есть правильная регулярка. 
Код

... preg_match_all('/<a([^>]+)>(.+?)<\/a>/is', $text...

И функциями готовыми поделился чтобы получать значения href, alt и т.п - getAttributes. Что собственно вызывает вопросы?

SamDark, 
Цитата(SamDark @  26.7.2006,  07:36 Найти цитируемый пост)
4. (href=)+ означает, что у тебя href= должно встретится один и более раз.

Неа. 1 или более раз. 
PM MAIL   Вверх
SamDark
Дата 26.7.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 4
Всего: 38



smartov
В данном конкретном случае и=или ;) 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
wwwdiz
Дата 26.7.2006, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 13.4.2006

Репутация: нет
Всего: 1



smartov, 

Код

preg_match_all('/<a([^>]+)>(.+?)<\/a>/is', $text...


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

если вот так вот???:
Код

^(<a\( )\s href=\'.preg_quote($ssil).'\ws title=\'.preg_quote($title).' \ws>)\'.$text.'\is+(<a>)$


И тут ещё один вопрос:
переменная $ssil содержит адрес ресурса, будет ли корректно вся эта тема работать?



 
PM   Вверх
SamDark
Дата 27.7.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый кот
***


Профиль
Группа: Участник
Сообщений: 1424
Регистрация: 25.7.2006
Где: Voronezh

Репутация: 4
Всего: 38



Что-то вроде:
Код

'~<a +(:?href=('.preg_quote($ssil).'))? +(:?title=('.preg_quote($title).'))? +>('.preg_quote($text).')</a>~is'


Так у тебя в $1 будет href, в $2 title, в $3 text. 


--------------------
rmcreative.ru — Это жжж неспроста...
yiiframework.ru — О фреймворке Yii на русском.
reggi — здесь я регистрирую домены
PM MAIL WWW GTalk Jabber MSN   Вверх
wwwdiz
Дата 27.7.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 89
Регистрация: 13.4.2006

Репутация: нет
Всего: 1



SamDark, значение двоеточего какое?  

Это сообщение отредактировал(а) wwwdiz - 27.7.2006, 14:59
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.