PHP从字符串中提取文本 - 修剪?

时间:2010-08-26 19:56:36

标签: php regex string

我有以下XML:

<id>tag:search.twitter.com,2005:22204349686</id>

如何将第二个冒号后的所有内容写入变量?

E.g。 22204349686

8 个答案:

答案 0 :(得分:3)

if(preg_match('#<id>.*?:.*?:(.*?)</id>#',$input,$m)) {
 $num = $m[1];
}

答案 1 :(得分:2)

如果您已在变量$str中使用了代码内容,则可以使用explode从第二个:获取所有内容:

list(,,$rest) = explode(':', $str, 3);

答案 2 :(得分:1)

$var = preg_replace('/^([^:]+:){2}/', '', 'tag:search.twitter.com,2005:22204349686');

我假设你已经有了没有<id>位的字符串。

否则,对于SimpleXML: $var = preg_replace('/^([^:]+:){2}/', '', "{$yourXml->id}");

答案 3 :(得分:0)

我认为您在变量($str)中有 id 标记的内容。

// get last occurence of colon
$pos = strrpos($str, ":");

if ($pos !== false) {
  // get substring of $str from position $pos to the end of $str 
  $result = substr($str, $pos); 
} else {
  $result = null;
}

答案 4 :(得分:0)

使用explodestrip_tags

list(,,$id) = explode( ':', strip_tags( $input ), 3 );

答案 5 :(得分:0)

首先,使用XML解析器解析XML。查找相关节点的文本内容(tag:search.twitter.com,2005:22204349686)。然后,编写一个相关的正则表达式,例如

<?php
$str = 'tag:search.twitter.com,2005:22204349686';
preg_match('#^([^:]+):([^,]+),([0-9]+):([0-9]+)#', $str, $matches);
var_dump($matches);

答案 6 :(得分:0)

正则表达式似乎不适合这种简单的匹配。

如果你没有字符串周围的ID标签,你可以简单地做

echo trim(strrchr($xml, ':'), ':');

如果他们在附近,你可以使用

$xml = '<id>tag:search.twitter.com,2005:22204349686</id>';
echo filter_var(strrchr($xml, ':'), FILTER_SANITIZE_NUMBER_INT);
// 22204349686

strrchr部分返回:22204349686</id>,而filter_var部分会删除不是数字的所有内容。

答案 7 :(得分:-2)

function between($t1,$t2,$page) {
    $p1=stripos($page,$t1);
    if($p1!==false) {
        $p2=stripos($page,$t2,$p1+strlen($t1));
    } else {
        return false;
    }
    return substr($page,$p1+strlen($t1),$p2-$p1-strlen($t1));
}

$x='<id>tag:search.twitter.com,2005:22204349686</id>';
$text=between(',','<',$x);
if($text!==false) {
   //got some text..
}