Извлечение текста между строками в Perl - PullRequest
0 голосов
/ 01 сентября 2010

Как в Perl извлечь текст в строку, если я знал до и после части текста?

Пример:

Ввод: www.google.com/search? size = 1 & make = BMW & model = 2000

Я хотел бы извлечь слово «BMW», которое всегда находится между «& make =» и следующим «&»

Ответы [ 2 ]

13 голосов
/ 01 сентября 2010

Не используйте регулярные выражения.Используйте URI и URI :: QueryParam , например:

use strict;
use warnings;
use URI;
use URI::QueryParam;

my $u = URI->new('http://www.google.com/search?size=1&make=BMW&model=2000');
print $u->query_param('make');
1 голос
/ 01 сентября 2010

Используйте регулярное выражение:

my ($captured_string) = $link =~ /\&make=(\w+)\&/;

Мое регулярное выражение предполагает, что вы захотите захватить все, что появилось в поле make. \w захватывает заглавные и строчные буквы. Если вы хотите захватить что-то еще, вы можете использовать класс символов. Как это [\w\s]+ будет соответствовать более чем одним буквам и пробелам. Вы можете добавить что-нибудь между [ ] символов для соответствия в любом порядке.

( ) - это то, что фактически делает захват. Если вы удалите его, он будет просто совпадать (и вы должны использовать его в операторе if. Если вы хотите захватить более одной строки (скажем, вы хотели также модель). На основе вашего примера вы можете использовать второй набор скобок, например это:

my ($make, $model) = $link =~ /\&make=(\w+)\&model=([A-Za-z0-9]+)/;

Надеюсь, это поможет!

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