Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Где я поворачиваю не туда?
Форумы портала PHP.SU » PHP » Регулярные выражения » Где я поворачиваю не туда?

Страниц (1): [1]
 

1. pps88 - 17 Мая, 2015 - 16:25:36 - перейти к сообщению
Вот что на входе:
Цитата:
<span class=\"itemprop\" itemprop=\"name\">Home</span>\r\n<span>(II)</span>\r\n<span class=\"nobr\">(<a href=\"/year/2015/?ref_=tt_ov_inf\"\r\n>2015</a>)</span>

Из этого мне нужно получить: Home и II
Регуляркой получаю, мне подходит - далее могу поиском-заменой удалить не нужное:
Цитата:
Home</span>\r\n<span>(II)</span>\r\n

Вот что делаю далее:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $a = '<span class=\"itemprop\" itemprop=\"name\">Home</span>\r\n<span>(II)</span>\r\n<span class=\"nobr\">(<a href=\"/year/2015/?ref_=tt_ov_inf\"\r\n>2015</a>)</span>';
  3. $pattern = '/">(.*?)<span class=\\"nobr\\">/';
  4.  
  5. $result = preg_match($pattern, $a, $matches);
  6. echo "Matches: $result<br>";
  7. print_r($matches);
  8.  

На выходе:
Цитата:
Matches: 0
Array ( )

Я только залез в этот удивительный мир регулярных выражений но пока не получил то что мне надо. Подскажите куда копать?
2. MAXUS - 17 Мая, 2015 - 20:36:20 - перейти к сообщению
/^<span[^>]*>\s*([^<]*)\s*<\/span>[^<]*<span[^>]*>\s*([^<]*)\s*<\/span>/i

Попробуй. Не проверял, но должно сработать.
3. pps88 - 17 Мая, 2015 - 20:45:48 - перейти к сообщению
MAXUS спасибо, работает. Нужно учить матчасть.
4. pps88 - 19 Мая, 2015 - 09:07:11 - перейти к сообщению
Покопался я в регулярках, немного понял - но есть то чего не могу понять.

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $a = '<span class=\"itemprop\" itemprop=\"name\">Веселi нiжки 2</span>\r\n<span class=\"nobr\">(<a href=\"/year/2011/?ref_=tt_ov_inf\"\r\n>2022</a>)</span>\r\n\r\n<br/>';
  3. $pattern_1 = ('#[>]([-:,A-Za-z0-9А-Яа-яIVXLC\s]*)[<][\/][s]#');
  4. preg_match($pattern_1, $a, $matches_1);
  5. $real_name = $matches_1[1];
  6.  
  7. echo "<pre>";
  8. print_r($real_name);
  9. echo "</pre>";
  10.  


В онлайн редакторах регулярок показывает нужную мне строку - "Веселi нiжки 2"
Но при обработке preg_match результатом является "2022" - оно тоже подходит по условию, но находится после нужной информации в строке. И насколько понимаю регулярки делают выборку слева-направо, при preg_match до первого результата. В чем я не прав?
5. Panoptik - 19 Мая, 2015 - 12:09:49 - перейти к сообщению
Цитата:
IVXLC
вот это лишнее в паттерне, оно попадает в диапазон A-Z
далее всю эту фигню A-Za-z0-9А-Яа-я я обычно заменяю на \w ну или можно исхитриться и искать все кроме символа начала тега то есть
Цитата:
>([^<]+)<

и не хватает модификатора для юникода (кирилические символы) то есть после последней # нужно добавить u
ну и вообще убрать лишние круглые скобки вокруг паттерна

 

Powered by ExBB FM 1.0 RC1