Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: выбрать только цифры с определенного примера (недоработка в regexp)
 
 автор: Unreal   (09.01.2007 в 23:48)   письмо автору
 
 

На странице находится поле с постраничной навигацией, я хочу выдернуть со всей страницы только эту часть и конкретно номер последней страницу

часть страницы выглядит так

Страницы: <a href="/browse/M/P1.html">
<b>&#171;</b></a> <a href="/browse/M/P1.html">1</a>
 <b>2</b>  <a href="/browse/M/P3.html">3</a> 
<a href="/browse/M/P4.html">4</a> &#133;  
<a href="/browse/M/P26.html">26</a> 
<a href="/browse/M/P27.html">27</a> 
<a href="/browse/M/P28.html">28</a>
 <a href="/browse/M/P29.html">29</a>
 <a href="/browse/M/P3.html"><b>&#187;</b></a></td>

</tr>
</table>
</div>
</td>
</tr>


в данном случае последняя страница - 29. Дело в том что на странице два поля с постраничной навигацией, поле расположенное внизу уникально тем что в нем есть</table></div>, в общем из всего этого нужно получить только одно число 29 в итоге.

Подскажите пожалуйста, уже несколько часов мучаюсь
получилось только вот это
\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>&#187;</b></a></td>)

в редакторе регулярных выражений находит нужное число, но если это экспортировать в PHP или Python то выражение не работает:

PHP
выдает Warning: preg_match() [function.preg-match]: Compilation failed: lookbehind assertion is not fixed length at offset 22 in test.php on line 30

<?php
if (preg_match('%\\d{1,2}(?= (?<=\\d{1,2})</a> <a href="/browse/\\w/P\\d{1,2}.html"><b>&#187;</b></a></td>)%'$page)) {
    print 
"found";
} else {
    print 
"not found"
}
?>


Python:
выдает raise error, v # invalid expression
sre_constants.error: look-behind requires fixed-width pattern

import urllib
import re

url = "d:/htdocs/A.html"
f=open(url, 'r')
text = f.read()
if re.search(r'\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>&#187;</b></a></td>)', text):
    print "found"
else:
    "not found"

   
 
 автор: cheops   (10.01.2007 в 00:42)   письмо автору
 
   для: Unreal   (09.01.2007 в 23:48)
 

Двойные обратные слеши - это не правильно
<?php 
if (preg_match('%\d{1,2}(?= (?<=\d{1,2})</a> <a href="/browse/\w/P\d{1,2}.html"><b>&#187;</b></a></td>)%'$page)) { 
    print 
"found"
} else { 
    print 
"not found" 

?>

приведите исходный код второй постраничной навигации, а то не очень понятно...

   
 
 автор: Unreal   (10.01.2007 в 06:52)   письмо автору
 
   для: cheops   (10.01.2007 в 00:42)
 

Нашел другое решение :)

Ищу строку "Найдено исполнителей:" рядом с ней цифра, если ее поделить на число элементов на странице то получится количество страниц. Например, найдено исполнителей 719/25=29 страниц

вот регулярное выражение (?!Найдено.исполнителей:.*<b>)(?<=<b>)\d{1,3}(?<!</b>)[^<b>]
небольшая програмка на Python

# -*- coding: windows-1251

import urllib
import re
import array
import time

url = "D:/htdocs/P1.html"
f=open(url, 'r')
text = f.read()
result = re.findall(r"(?!Найдено.исполнителей:.*<b>)(?<=<b>)\d{1,3}(?<!</b>)[^<b>]", text)
# На странице постраничная навигация показывается два раза поэтому мне нужно только первое вхождение
print result[0]

   
 
 автор: Trianon   (10.01.2007 в 09:45)   письмо автору
 
   для: cheops   (10.01.2007 в 00:42)
 

>Двойные обратные слеши - это не правильно

на языке perl - возможно. На языке php - отнюдь.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования