проблема регулярного выражения Perl - $ amp на странице финансов Yahoo - PullRequest
0 голосов
/ 27 марта 2011

Я нашел старый хак на Perl на сайте O'Reilly http://oreilly.com/pub/h/1041 и решил проверить его. После небольшой суеты он начал работать, но регулярные выражения устарели. Вот вопрос: с этим

  /<a href="\/q\/op\?s=(.*?)\&m=(.*?)">/    

в качестве первой строки регулярного выражения, что нужно изменить, чтобы снова выполнить регулярное выражение? Ниже приведены фрагменты из

http://finance.yahoo.com/q/op?s=FISV

* * 1010

и

 <a href="/q/os?s=FISV&amp;m=2011-04-15">

.

Первоначальный хак датирован 2004 годом, и тогда символы опций выглядели так (FQVAH или FQVFF) вместо fisv110416c00060000 для опциона колл и fisv110416p00090000 для опциона пут. Первое, что я сделал, чтобы начать работу, - это изменил все экземпляры $ url на $ curl, потому что, пока имя не было изменено, символ не передавался Yahoo для поиска. & Amp; доставляет мне больше всего неприятностей. Если это будет работать без изменений, я был бы очень удивлен и очень хотел бы знать, какая система и perl -V установлены. SLES 10 и Perl 5.8.0 - это то, что я сейчас использую.

Любые предложения будут полезны. Это может быть полезным сценарием для любого, кто серьезно относится к защите от падающего рынка акций.

Спасибо

robm

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Вы должны сначала удалить html, это превратит &amp; в &, или просто изменить регулярное выражение, например:

/<a href="\/q\/os\?s=(.*?)\&(?:amp;)?m=(.*?)">/

Для соответствия обоим типам URL:

/<a href="\/q\/o[ps]\?s=(.*?)\&(?:amp;)?[mk]=(.*?)">/
1 голос
/ 27 марта 2011

Я не / 100% / уверен, что вы спрашиваете, но если я понимаю, вы хотите регулярное выражение, которое будет захватывать "fisv110416c00060000" и сообщать вам первые несколько букв, будь то звонок или пут, а сумма?

Если это так, вы ищете что-то вроде:

/([a-z]+)(\d+)([cp])(\d+)/

Это должно охватить следующее для первого примера

$1 = "fisv"
$2 = 110416
$3 = c
$4 = 00060000

Theоригинальное регулярное выражение было очень специфичным для этой строки HTML.Вы можете включить его начальные биты, если вам нужно использовать его для проверки того, что вся строка также присутствует.Конечно, сделайте свое регулярное выражение как можно более жестким, чтобы избежать чрезмерных совпадений и потерянного времени.Я просто не уверен, какой именно шаблон вы пытаетесь найти (то есть: всегда ли это "fisv"?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...