我尝试了很多我在网上找到的代码,但没有一种可以使用。
我有一个像这样的HTML代码。
<div class="usernameHolder">Username: user123</div>
我想要的是从这行代码中获取文本user123,当然这段代码与HTML内容的其余部分(HTML页面)有没有人能指出我正确的方向?
$text = @source=~ /Username:\s+(.*)\s+</;
print $text;
但它不会返回任何东西。
答案 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