Perl在标签之间获取文本

时间:2012-06-16 23:29:22

标签: perl

我尝试了很多我在网上找到的代码,但没有一种可以使用。

我有一个像这样的HTML代码。

<div class="usernameHolder">Username: user123</div>

我想要的是从这行代码中获取文本user123,当然这段代码与HTML内容的其余部分(HTML页面)有没有人能指出我正确的方向?

$text = @source=~ /Username:\s+(.*)\s+</;
print $text;

但它不会返回任何东西。

2 个答案:

答案 0 :(得分:2)

您的第二个\s+与任何内容都不匹配,因为user123与以下标记之间没有空格。

这个怎么样?

/Username:\s*(.*?)\s*</

此处,如果有任何,则\s*会丢弃空格,并且.*?就在那里,这样您就不会抓取该过程中的大部分文档。 (见贪婪与非贪婪)

答案 1 :(得分:2)

如果HTML是字符串:

$source = '<div class="usernameHolder">Username: user123</div>';

# Allow optional whitespace before or after the username value.
$text = $source=~ /Username:\s*(.*?)\s*</;

print $1 . "\n";   # user123

如果HTML在数组中:

@source = (
    '<p>Some text</p>',
    '<div class="usernameHolder">Username: user123</div>',
    '<p>More text</p>'
);
# Combine the matching array elements into a string.
$matching_lines = join "",grep(/Username:\s*(.*?)\s*</, @source);

# Extract the username value.
$text = $matching_lines =~ /Username:\s*(.*?)\s*</;

print $1 . "\n";   # user123

使用数组的更紧凑版本:

@source = (
    '<p>Some text</p>',
    '<div class="usernameHolder">Username: user123</div>',
    '<p>More text</p>'
);

# Combine the matching array elements in a string, and extract the username value.
$text = (join "",grep(/Username:\s*(.*?)\s*</, @source)) =~ /Username:\s*(.*?)\s*</;

print $1 . "\n";   # user123