【问题标题】:How to find a particular value from a string如何从字符串中查找特定值
【发布时间】:2010-09-03 14:26:53
【问题描述】:

我有一个字符串(不是 xml

<headername>X-Mailer-Recptid</headername>
<headervalue>15772348</headervalue>
</header>

由此,我需要得到15772348 的值,即headervalue 的值。怎么可能?

【问题讨论】:

  • 你说你没有xml,但你呈现的肯定是某种xml结构化代码。所以如果你有一个 XML 结构化文档,你应该使用依赖解析器。
  • 会不会,您有一个 HTTP Header,并以 XML 形式向我们展示,但您实际上是在谈论 HTTP Header?

标签: php string parsing find


【解决方案1】:

使用PHP DOM并使用getElementsByTagName()遍历headervalue标签:

<?php
$doc = new DOMDocument;
@$doc->loadHTML('<headername>X-Mailer-Recptid</headername><headervalue>15772348</headervalue></header>');

$items = $doc->getElementsByTagName('headervalue');

for ($i = 0; $i < $items->length; $i++) {
    echo $items->item($i)->nodeValue . "\n";
}
?>

这给出了以下输出

15772348

[编辑]: 更新代码以抑制有关无效 headername 和 headervalue 标记的非 HTML 警告,因为它们不是真正的 HTML 标记。此外,如果您尝试将其加载为 XML,则完全无法加载。

【讨论】:

  • 它输出答案,但也收到一些警告警告:DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: Tag headername invalid in Entity, line: 1 in C:\wamp\www第 496 行的 \test.php 警告:DOMDocument::loadHTML() [function.DOMDocument-loadHTML]: Tag headervalue 在实体中无效,第 496 行的 C:\wamp\www\test.php 中的第 1 行警告:DOMDocument: :loadHTML() [function.DOMDocument-loadHTML]: 意外的结束标记:实体中的标题,行:C:\wamp\www\test.php 中的第 1 行,第 496 行
  • @Linto,我已更新代码以抑制警告。立即尝试新代码。
  • 因为没有根元素,所以无法作为 XML 加载。
  • @Boltclock:是的,这就是为什么我通过编辑编辑来明确表示:)
【解决方案2】:

这在我看来类似于 XML。无论如何,如果您不想将字符串解析为 XML(这可能是个好主意),您可以尝试这样的操作:

<?
$str = "<headervalue>15772348</headervalue>";
preg_match("/<headervalue\>([0-9]+)<\/headervalue>/", $str, $matches);
print_r($matches);
?>

【讨论】:

  • 这样简单的事情没问题,但是关于使用正则表达式解析非常规语言的强制性警告。 That way lies madness.
【解决方案3】:

// 查找字符串短路径

function my_url_search($se_action_data)
    {
        // $regex = '/https?\:\/\/[^\" ]+/i';
           $regex="/<headervalue\>([0-9]+)<\/headervalue>/"
         preg_match_all($regex, $se_action_data, $matches);
         $get_url=array_reverse($matches[0]);
         return array_unique($get_url);
    }
echo my_url_search($se_action_data)

【讨论】:

    【解决方案4】:
           <?php
          $html = new simple_html_dom();
            $html = str_get_html("<headername>X-Mailer-Recptid</headername>headervalue>15772348</headervalue></header>");        // Use Html dom here 
            $get_value=$html->find("headervalue", 0)->plaintext;
            echo $get_value;
    
        ?>
    
    
    
      http://simplehtmldom.sourceforge.net/manual.htm#section_find
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2018-08-17
      • 2019-10-15
      • 1970-01-01
      相关资源
      最近更新 更多