0

我尝试了很多我在互联网上找到的代码,但没有一个可以工作。

我有一个类似这样的 HTML 代码。

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

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

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

但它不会返回任何东西。

4

2 回答 2

2

你的第二个\s+不匹配任何东西,因为user123和下面的标签之间没有空格。

这个怎么样?

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

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

于 2012-06-16T23:31:45.687 回答
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
于 2012-06-17T12:53:30.370 回答