Perl String удалить часть этого после шаблона - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть переменная my $html, и она содержит строковое значение.Я хочу сократить его после слова

</SELECT>

Как я могу сделать это с Perl?

Ответы [ 4 ]

3 голосов
/ 14 апреля 2011
use warnings;
use strict;

my $html = '<SELECT>foo</SELECT> bar';
$html =~ s{(</SELECT>).*}{$1};
print "$html\n";

__END__

<SELECT>foo</SELECT>

Вам также следует рассмотреть возможность использования одного из множества HTML-парсеров в CPAN.

2 голосов
/ 14 апреля 2011
$html =~ s#</SELECT>.*$#</SELECT>#;

Вы, вероятно, можете написать его без </SELECT> в строке замены, но ИМХО это будет менее читабельным.

Обратите внимание, что подстановка s /// может использовать другие символы помимо / в качестве разделителей, и в этом случае я решил использовать #, потому что ваше регулярное выражение содержит символ прямой косой черты, который в противном случае пришлось бы экранировать, делая регулярное выражение менее читабельно

1 голос
/ 14 апреля 2011

Не используйте регулярное выражение (электропила), когда достаточно ножа (ищите фиксированную строку):

my $html = 'use dom to work with </SELECT> html!';
my $cut  = '</SELECT>';
printf "|%s|\n", substr( $html, index( $html, $cut ) + length( $cut ) );
==>
| html!|
0 голосов
/ 14 апреля 2011

Если вы хотите получить текст, который стоит перед первым </SELECT>, вы можете использовать регулярное выражение, например:

$html =~ /(.*?<\/SELECT>)/;
my $required_text = $1;

или за один шаг:

my ($required_text) = $html =~ /(.*?<\/SELECT>)/;

использует не жадный модификатор ?, который, я думаю, вам нужен.
Или лучше подпрограмма substr(), как в предыдущем ответе.

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