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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярные выражения 
V
    Опции темы
NZero
Дата 23.10.2014, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Написал небольшой код для вытягивания данных из 
Код

<meta name="keywords" content="засор, канализация, устранение засоров, прочистка канализации, разморозка труб" />


мой код

Код

<?php
$file=file('home.php');
foreach($file as $line):
    if(stristr($line, "keywords"))
    {
          $string=str_replace('"','',$line); //Убираю все кавычки
    }
endforeach;
$str=trim($string);//Убираю пробелы вначале и вконце строки
$reg="/content=/(.*)\\s/i";//регулярное выражение
print(preg_match($reg, $str));//выполняю регулярное выражение
?>


После выполнения кода должно получиться
засор, канализация, устранение засоров, прочистка канализации, разморозка труб
но получаю
Код

Warning: preg_match() [function.preg-match]: Unknown modifier '(' in Z:\home\localhost\www\zacora.net\file.php  on line 16

Кстати нашел отличный сайт для генерации регулярных выражений regex101.com
PM MAIL WWW ICQ   Вверх
igorold
Дата 23.10.2014, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 557
Регистрация: 22.12.2005
Где: Россия->Урал-& gt;Миасс

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



может так:

Код

$reg="/content=(.*)\\/i";


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
NZero
Дата 23.10.2014, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(igorold @ 23.10.2014,  15:44)
может так:

Код

$reg="/content=(.*)\\/i";

Так выдает другую ошибку! вот так более менее работает
Код

$reg="/content=\/(.*)\\s/i";

но выводится 0. Как же выводить то что мне нужно?
PM MAIL WWW ICQ   Вверх
s0lman
Дата 23.10.2014, 16:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


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

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



Гоните. 
Идем читать мануал http://php.net/manual/ru/function.preg-match.php
Цитата

Searches subject for a match to the regular expression given in pattern.

Цитата

preg_match() returns 1 if the pattern matches given subject, 0 if it does not, or FALSE if an error occurred.

Чтоб получить вхождения, есть третий параметр $matches.

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

В простейшем исполнении задача решается примерно так
Код

preg_match('/content="(.*)"/i', $str, $matches);
print_r($matches[1])

где $str - исходная строка (с кавычками, пробелами и т.д.)




Это сообщение отредактировал(а) s0lman - 23.10.2014, 16:11


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
baldina
Дата 23.10.2014, 16:09 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(NZero @  23.10.2014,  15:11 Найти цитируемый пост)
"/content=/(.*)\\s/i"

слэш лишний
Код

'/content=(.*)\s/i'


и чего эта строка должна делать?
Цитата(NZero @  23.10.2014,  15:11 Найти цитируемый пост)
preg_match($reg, $str)


я бы сделал типа
Код

foreach(file('home.php') as $line)
    if(preg_match('/keywords[^>]+content="([^"]*)"/', $line, $matches)>0)
    {
        $result = array_map (function($v){
             return trim($v);
          },
          explode (',',$matches[1]));
        break;
    }
print_r($result);


Это сообщение отредактировал(а) baldina - 23.10.2014, 16:12
PM MAIL   Вверх
NZero
Дата 23.10.2014, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал так
Код

<?php
$file=file('home.php');
foreach($file as $line):
    if(stristr($line, "keywords"))
    {
        $reg='/content="(.*)"/i';//регулярное выражение
        preg_match($reg, $line, $title);//выполняю регулярное выражение

    }
endforeach;
echo $title[1];
?>

PM MAIL WWW ICQ   Вверх
s0lman
Дата 23.10.2014, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и лохматый
**


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

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



Цитата(NZero @  23.10.2014,  15:20 Найти цитируемый пост)
if(stristr($line, "keywords"))

Если проверять на вхождение, тогда, дума, лучше strpos


--------------------
Когда я уже выучусь на волшебника? :(
PM   Вверх
baldina
Дата 24.10.2014, 09:43 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(NZero @  23.10.2014,  16:20 Найти цитируемый пост)
content="(.*)"

может не работать, т.к. (.*) может содержать "
т.е. например в строке '<meta keywords="" content="a,b,c"><meta charset="utf-8">' в подстановку попадет
'a,b,c"><meta charset="utf-8'

надо пожаднее, (.*?)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




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


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

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