PHP извлечь текст из строки - обрезать? - PullRequest
4 голосов
/ 26 августа 2010

У меня есть следующий XML:

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

Как я могу написать все после второго двоеточия в переменную?

например. 22204349686

Ответы [ 8 ]

3 голосов
/ 26 августа 2010
if(preg_match('#<id>.*?:.*?:(.*?)</id>#',$input,$m)) {
 $num = $m[1];
}
2 голосов
/ 27 августа 2010

Если у вас уже есть только содержимое тегов в переменной $str, вы можете использовать explode, чтобы получить все, начиная со второго : on:

list(,,$rest) = explode(':', $str, 3);
1 голос
/ 27 августа 2010

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

Я предполагаю, что у вас уже есть строка без <id> битов.

В противном случае для SimpleXML: $var = preg_replace('/^([^:]+:){2}/', '', "{$yourXml->id}");

0 голосов
/ 27 августа 2010

Regex кажется мне неуместным для такого простого соответствия.

Если у вас нет идентификаторов вокруг строки, вы можете просто сделать

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 удаляет все, кроме числа.

0 голосов
/ 27 августа 2010

Сначала проанализируйте 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);
0 голосов
/ 27 августа 2010
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..
}
0 голосов
/ 27 августа 2010

Используйте explode и strip_tags:

list(,,$id) = explode( ':', strip_tags( $input ), 3 );
0 голосов
/ 27 августа 2010

Я полагаю, у вас есть в переменной ($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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...