我有一个数组,其内容如下:
print Dumper(\@jsession);
$VAR1 = [
'<html><body><form name = \'form\' id=\'form\' method = \'POST\' action = \'/mySite.jsp\'><input type = hidden name = \'phpSessionID\' value = \'GZbtXhI9JiQ**\'><input type = hidden name = \'LoggedUserName\' value = \'MyName\'><!--input type = submit name = \'button\' value ='\'goAhead\'--></form> <script language = \'JavaScript\'> document.getElementById(\'form\').submit();</script> </body></html>
];
我的目标是将phpSessionID值放在变量说$ session,即
$session=GZbtXhI9JiQ**;
我必须使用Perl grep执行此操作。我尝试了下面的内容虽然不多,但
$session=grep(/^<.*phpSessionID.*>$/,@jsession);
我刚接触RegEx并且正在努力做到这一点。
答案 0 :(得分:1)
我假设您需要来自value
元素的input
属性name
属性为phpSessionID
。这个。
<input type = hidden name = 'phpSessionID' value = 'GZbtXhI9JiQ**'>
您应该使用针对该作业的模块来解析HTML,例如HTML::TreeBuilder
。使用正则表达式无法可靠地完成它,因为元素的可能格式存在很大差异。
答案 1 :(得分:0)
Borodin建议使用HTML::TreeBuilder或其他一些解析模块绝对是可行的方法。
因为我有一段时间没有使用该模块,所以我决定继续使用你提供的html实现他的建议。我稍微重新格式化了html,以便更容易阅读,但这不会影响此代码的功能:
use HTML::TreeBuilder;
use strict;
use warnings;
my $root = HTML::TreeBuilder->new_from_content(<DATA>);
if (my $element = $root->look_down('_tag' => 'input', 'name' => 'phpSessionID')) {
print "Value is " . $element->attr('value') . "\n";
} else {
warn "phpSessionID not found";
}
__DATA__
<html>
<body>
<form name = 'form' id='form' method = 'POST' action = '/mySite.jsp'>
<input type = hidden name = 'phpSessionID' value = 'GZbtXhI9JiQ**'>
<input type = hidden name = 'LoggedUserName' value = 'MyName'>
<!--input type = submit name = 'button' value =''goAhead'-->
</form>
<script language = 'JavaScript'>
document.getElementById('form').submit();
</script>
</body></html>
输出
Value is GZbtXhI9JiQ**