【问题标题】:Finding substring in perl在 perl 中查找子字符串
【发布时间】:2012-11-11 12:41:04
【问题描述】:

我想检查xml标签中是否存在字符串

xml标签的格式如下。

<admin var="s_admin">xyz</admin>

我试过了

index($xmlString,$str) != -1

但这对我不起作用。这是我的代码:

my $hostname = hostname;
my $wlsadmin = grep s_wls_admin_host $ENV{CONTEXT_FILE};
$wlsadmin=~s/^\s+|\s+$//g;
if(index($wlsadmin,$hostname) != -1) {
    print("True");
}
print($hostname);
print($wlsadmin);

这里是打印语句的值:

 rws3510357 <wls_admin_host oa_var="s_wls_admin_host">rws3510357</wls_admin_host>

【问题讨论】:

  • 嗯,它对我有用。你能告诉我们更多的代码吗?重现所谓行为的working example
  • 如果您用xml-parsing 标记这个问题,您是否考虑过使用XML 解析器?
  • 我是 perl 的初学者,我不确定如何使用 xml 解析
  • not working for me 是什么意思?你能在你使用它的地方显示代码吗?
  • @amon my $hostname = hostname;我的 $wlsadmin = grep s_wls_admin_host $ENV{CONTEXT_FILE}; $wlsadmin=~s/^\s+|\s+$//g; if(index($wlsadmin,$hostname) != -1) { print("True"); } 打印($主机名);打印($wlsadmin);这是打印语句 rws3510357 rws3510357 的值

标签: perl xml-parsing


【解决方案1】:

正如其他人评论的那样,我不确定您出了什么问题,但这里有一个使用基于 DOM 的 XML 解析器来查找标记并提取其内容的示例。从那里很容易将这些内容与一些字符串进行比较,就像您使用 index 所做的那样。

#!/usr/bin/env perl

use strict;
use warnings;

use Mojo::DOM;
my $dom = Mojo::DOM->new(<<'END');
<wls_admin_host oa_var="s_wls_admin_host">rws3510357</wls_admin_host>
END

my $hostname = 'rws3510357';

my $wlsadmin = $dom->at('wls_admin_host')->text;

if (index($wlsadmin, $hostname) != -1 ) {
  print "True\n";
}

【讨论】:

  • +1 用于使用很酷的解析器。顺便说一句:使用at 而不是find-&gt;[0] 可能会更优雅一点。 :)
  • 也许你是对的,我想我误解了at 的工作原理。似乎在内部这就是它所做的一切。会改变的。
  • 感谢 memowe 和 Joel 展示了如何使用解析器实现同样的目的
猜你喜欢
  • 2014-05-29
  • 1970-01-01
  • 2011-07-13
  • 2021-08-13
  • 2015-10-28
  • 2017-12-04
  • 1970-01-01
相关资源
最近更新 更多