RegExp вырезает почти все, но не все.

YurkoSirko

Guest
RegExp вырезает почти все, но не все.

Регулярное выражение вырезает почти правильно і почти все :)
Но не вырезает последний символ, который мне нужен.
Пишу програмку, которая должна узнать ключевые слова страницы
Я делаю так:
$result = preg_match('/[CONTENT,content]=\"((.(?![>\"<^]))*)/',$haystack2, $keywords);

Вырезает все, кроме последнего символа.
Пробовал так:
$result = preg_match('/[CONTENT,content]=\"(.*)[(?=\" )^]/',$haystack2, $keywords), но не всегда срабатыет корректно...
 

YurkoSirko

Guest
Ну типа, <meta name="keywords" content=".....">
Я должен написать курсовик "минипоисковик"...
 

YurkoSirko

Guest
2 uchenik
Спасибо, я знаю :)
Я только учусь...
Буду очень благодарен, если кто-нибудь поможет написать лучше!
 

uchenik

Новичок
Этих статей достаточно чтобы написать твою регулярку:

http://detail.phpclub.ru/article/simple_regular
http://detail.phpclub.ru/article/regexp_1
http://detail.phpclub.ru/article/regexp_2
 

YurkoSirko

Guest
Прочитал... Причем не первый раз...
Попробовал сначала.
Вот что получилось '/(?<=content=\")(.*)(?=\")/i'
Не работает. :(
... и так тоже : '/[content=\"](.*)[\"]/i'
Может кто-нибудь помочь?
 

YurkoSirko

Guest
Новая версия :) :
'/content=\"(.*)(?=[\"\">])/i
Мне надо, что-бы справа от нужного мне текста было " или ">
Я делаю так (?=[\"\">]), но вырезается и то что левее " или ">.
Где ошибка?
 

uchenik

Новичок
(?<=), (?!) - вот эти штуки для твоего выражения не нужны.

Вспомни означают такие скобки "[]" и подумай как ты их используешь.
 

YurkoSirko

Guest
Справа должно быть " или ">.
Я пробовал и так: '/content=\"(.*)[\"\">]/i'. Все равно вырезает то что слева от ">. :(
 

uchenik

Новичок
уже ближе.

Справа должно быть ", поэтому так и пиши, что захватить нужно все что не ", тоесть [^"]+

-~{}~ 15.04.05 16:56:

тоесть '/content="[^"]+"/is'

для "курсовика" этого достаточно.
 

YurkoSirko

Guest
Спасибо огромное!
В результате, еще немного переделал.
Вот что получилось:
'/keywords\"\s*content=\"([^\">]*)\"/is'

Не универсален, но не лезет куда не надо. То что нужно!
 

YurkoSirko

Guest
Работает и с ними.
А когда нужно, когда - нет?
 

uchenik

Новичок
Нужно, когда кавычки вступят в конфликт с кавычками ограничивающими твой шаблон.

Пример:

'/content=[\'"]([^\'"]+)[\'"]/is'

а что делает данный шаблон догадайся сам.
 

sakon

П..и.н..ок
uchenik
Для курсовой подойдет, но мне кажется правильнее было бы
'/content=(\'|")(.+?)\1/i'
 
Сверху