正则表达式使用PHP拆分文本上的任何XML标记

时间:2013-07-17 01:44:02

标签: php xml regex text

这是我问题的文字示例:

The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2> the lazy <tag1>dog</tag1>

我可以这样做:

array_text[0] => The
array_text[1] => <tag1>quick brown fox</tag1>
array_text[2] => <tag2>jumps over</tag2>
array_text[3] => the
array_text[4] => lazy
array_text[5] => <tag1>dog</tag1>

我相信这可以通过正则表达式(也许)来完成。但我不知道是否还有其他更好的方法。真的,我在正则表达方面不擅长。

请提前帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

抱歉,我刚刚意识到,我从上一个问题得到了答案:Count Words on XML Text Using PHP

我只是添加了一些代码,所以我可以得到像这个问题的输出,这里是代码:

$xml_text = 'The <tag1>quick brown fox</tag1> <tag2>jumps over</tag2> the lazy <tag1>dog</tag1>';

$doc    = new DOMDocument();
$result = $doc->loadXML(sprintf('<root>%s</root>', $xml_text));

function utf8_count_words($string) {
    return (int)str_word_count($string);
}

$word_count = 0;
$array_text = array();
$i = 0;
foreach ($doc->documentElement->childNodes as $node) {
    switch ($node->nodeType) {
        case XML_ELEMENT_NODE:
            $array_text[$i] = "<".$node->nodeName.">".$node->nodeValue."</".$node->nodeName.">";
            $i++;
            break;
        case XML_TEXT_NODE:
            $data_split = explode(" ", $node->data);
            for ($j=0; $j<count($data_split) ; $j++) { 
                if ($data_split[$j] != "") {
                    $array_text[$i] = $data_split[$j];
                    $i++;   
                }
            }
            break;
        default:
            throw new Exception(sprintf('Unexpected nodeType in XML-text: %d', $node->nodeType));
    }
}

var_dump($array_text);

感谢您的关注。 :d