我尝试了很多我在互联网上找到的代码,但没有一个可以工作。
我有一个类似这样的 HTML 代码。
<div class="usernameHolder">Username: user123</div>
我想要的是从这行代码中获取文本 user123,当然这段代码与 HTML 内容的其余部分(一个 HTML 页面)一起使用 谁能指出我正确的方向?
$text = @source=~ /Username:\s+(.*)\s+</;
print $text;
但它不会返回任何东西。
我尝试了很多我在互联网上找到的代码,但没有一个可以工作。
我有一个类似这样的 HTML 代码。
<div class="usernameHolder">Username: user123</div>
我想要的是从这行代码中获取文本 user123,当然这段代码与 HTML 内容的其余部分(一个 HTML 页面)一起使用 谁能指出我正确的方向?
$text = @source=~ /Username:\s+(.*)\s+</;
print $text;
但它不会返回任何东西。
你的第二个\s+不匹配任何东西,因为user123和下面的标签之间没有空格。
这个怎么样?
/Username:\s*(.*?)\s*</
在这里,如果有空格,\s*则丢弃空格,这样您就不会在此过程中抓取大部分文档。(参见贪婪与非贪婪).*?
如果 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