Что нового

Помогите вытащить номер телефона

mef-t

Осваивающий
Сообщения
306
Репутация
30
Добрый день.

Есть код:
Код:
<div class=b2><span class=b1>Телефон:</span> <a href=javascript:void(go('/details.php?id=200'))>8-909-992-89-27</a></div>
<div class=vd><a href='javascript:void(video(200));'> видео </a></div>

Нужно вытащить номер телефона. С помощью регулярного выражения.
Следует учитывать, что это отрывок кода, а такое сочетание тегов так же встречается.
Единственное, за что можно зацепиться, это за "Телефон:".
Просьба помочь.

P.S. если более глобально, то просьба подсказать, как вытащить часть текста из строки,
- зная начальную ее часть,
- зная, что между известной и требуемой есть некий текст, который не статичен
- зная, что искомый текст состоит из набора цифр
(изначально в тексте убираю все пробелы, дефисы, скобки, а так же заменяю все буквенные символы, похожие на цифры, на сами цифры: з-3)


Добавлено:
Сообщение автоматически объединено:

У меня напрашивается маска: '(?<=Телефон:smile:.*\d+'
Но в результат попадают промежуточные значения по куску '.*'
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
#include 'array.au3'
$file="<div class=b2><span class=b1>Телефон:</span> <a href=javascript:void(go('/details.php?id=200'))>8-909-992-89-27</a></div>"& _
"<div class=vd><a href='javascript:void(video(200));'> видео </a></div>"
$str=StringRegExp($file,'Телефон:(?:(?!>\d).)*>([^<]+)',3)
_ArrayDisplay($str)
 
Автор
mef-t

mef-t

Осваивающий
Сообщения
306
Репутация
30
То, что надо.
А Вы не могли бы расписать, для понимания? :whistle:
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$file="<div class=b2><span class=b1>Телефон:</span> <a href=javascript:void(go('/details.php?id=200'))>8-909-992-89-27</a></div>"& _
"<div class=vd><a href='javascript:void(video(200));'> видео </a></div>"
MsgBox(32,'',StringRegExpReplace($file,'(?s).*?>([0-9-]+)<.*','\1'))

Ещё вариант.
 
Автор
mef-t

mef-t

Осваивающий
Сообщения
306
Репутация
30
Этот вариант не подойдет, т.к. кроме телефонов могут встречаться и другие цифры. А нужны именно телефоны.



Добавлено:
Сообщение автоматически объединено:

Я правильно понял, если в маске присутствуют скобки, то результат вернется тот, что в скобках, если же их нет, то в результат попадут и то, что указано вне скобок?
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Попробуйте так:
Код:
;...
ConsoleWrite(StringRegExpReplace($sData, '.*(?<=details.php).*>([\d-]+).*', '$1') & @CR)
;...
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Код:
#Include <Array.au3>

$file="<div class=b2><span class=b1>Телефон:</span> <a href=javascript:void(go('/details.php?id=200'))>8-909-992-89-27</a></div>"& _
"<div class=vd><a href='javascript:void(video(200));'> видео </a></div>"& _
"<div class=b2><span class=b1>Телефон:</span> <a href=javascript:void(go('/details.php?id=200'))>+7-(205)-992-89-27</a></div>"

$sPattern = 'Телефон.*?>([-\d\+\(\)]+)<'
$aResult = StringRegExp($file, $sPattern, 3)
_ArrayDisplay($aResult)
 
Автор
mef-t

mef-t

Осваивающий
Сообщения
306
Репутация
30
StringRegExpReplace мне не подходит, так как все телефоны нужно поместить в массив.
Правильнее сразу туда забирать.
Остальные варианты подходят, но мне достаточно первого.

Более того, у меня даже отработает такой вариант:
Код:
$sPattern = 'Телефон.*?>(\d+)<'
$aResult = StringRegExp($file, $sPattern, 3)

т.к.
(изначально в тексте убираю все пробелы, дефисы, скобки, а так же заменяю все буквенные символы, похожие на цифры, на сами цифры: з-3)

На текущий момент я просто хочу понять, в каких случаях указанные символы или куски текста попадают в результат, а какие нет. Предположил, что "если в маске присутствуют скобки, то результат вернется тот, что в скобках, если же их нет, то в результат попадут и то, что указано вне скобок".

Просьба подтвердить / опровергнуть / объяснить / или же хотя бы дать ссылку на инфу, где это расписано.
Спасибо.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
http://autoit-script.ru/index.php/topic,4901.0.html
 
Верх