1

こんにちは、$submitkey に値 mjxjezhmgrutgevclt0qtyayiholcdctuxbwb を取得する必要があります。コードの何が問題になっていますか?

my $str = '<input type="hidden" value="set" name="fr.posted"></input><input type="hidden" value="mjxjezhmgrutgevclt0qtyayiholcdctuxbwb" name="fr.submitKey"></input><div class="form-actions form-actions__centrate"><button value="clicked" id="hook_FormButton_button_accept_request" onclick="className +=" button-loading"" class="button-pro form-actions__yes" type="submit" name="button_accept_request"><span class="button-pro_tx">Войти</span>';
($submitkey) = $str =~ m/value="(.*?)" name="fr.submitKey"/;
print $submitkey;
4

4 に答える 4

2

絶対に使用しないでください.*?。それはあなたが実際にやろうとしていることでは決してありません。それを機能させたとしても、一致するものがない場合、非常に悪いパフォーマンスを生み出す可能性が非常に高くなります。この場合、[^"]*

于 2012-11-14T20:26:59.663 に答える
1

.*?Perl は、文字列全体の中で可能な限り短い一致を検索しません。したがって、 の前のテキスト.*?は文字列の前の方に一致し、Perl はそこで一致を見つけて喜んでいます。.*?単純に、前の部分が一致する最初のポイントからできるだけ少ない文字に一致することを意味し.*?ます。

@ikegamiが言ったように:[^"]*特定のケースでは代わりに使用してください。

于 2012-11-14T20:30:14.993 に答える
1

valueの最初のインスタンスからまでずっと一致しています"fr.submitKey"

すべての値が引用符で囲まれているという事実を利用してください。の一部として引用符以外の文字のみを探しますvalue

さらに、特別な capture-group 変数を使用する方がクリーンです。

my $str = '<input type="hidden" value="set" name="fr.posted"></input><input type="hidden" value="mjxjezhmgrutgevclt0qtyayiholcdctuxbwb" name="fr.submitKey"></input><div class="form-actions form-actions__centrate"><button value="clicked" id="hook_FormButton_button_accept_request" onclick="className +=" button-loading"" class="button-pro form-actions__yes" type="submit" name="button_accept_request"><span class="button-pro_tx">Войти</span>';
$str =~ m/value="([^"]*)" name="fr.submitKey"/;
$submitkey = $1;
print $submitkey;
于 2012-11-14T20:30:29.960 に答える
0

このタスクには実際の DOM パーサーを使用する方がはるかに優れています。Mojoliciousツール スイートの一部であるMojo::DOMが気に入っています。、およびが有効になっていることに注意してください。このメソッドは、CSS3 セレクターを使用して一致する最初のインスタンスを見つけます。use Mojo::Base -strictstrictwarningsutf8at

#!/usr/bin/env perl

use Mojo::Base -strict;
use Mojo::DOM;

my $dom = Mojo::DOM->new(<<'END');
<input type="hidden" value="set" name="fr.posted"></input><input type="hidden" value="mjxjezhmgrutgevclt0qtyayiholcdctuxbwb" name="fr.submitKey"></input><div class="form-actions form-actions__centrate"><button value="clicked" id="hook_FormButton_button_accept_request" onclick="className +=" button-loading"" class="button-pro form-actions__yes" type="submit" name="button_accept_request"><span class="button-pro_tx">Войти</span>
END

my $submit_key = $dom->at('[name="fr.submitKey"]')->{value};
say $submit_key;
于 2013-06-23T23:27:18.063 に答える