0

インターネットで見つけた非常に多くのコードを試しましたが、どれも機能しませんでした。

このようなHTMLコードがあります。

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

私が望むのは、このコード行からテキスト user123 を取得することです。もちろん、このコードは残りの HTML コンテンツ (HTML ページ) と一緒です。誰かが私を正しい方向に向けることができますか?

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

しかし、それは何も返しません。

4

2 に答える 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 に答える