PHP正则表达式:从字符串的开头到':'获取所有文本

时间:2011-08-09 13:58:23

标签: php regex

  

可能重复:
  PHP Regex to convert text before colon to link
  Return the portion of a string before the first occurrence of a character in php

我需要从twitter rss Feed获取用户名。
我将Feed中的数据作为标题返回,我想提取用户名。

UsernameIwanttoget:This is the twitter message....

所以基本上,在“”之前获取所有文字。

7 个答案:

答案 0 :(得分:4)

$pos = strpos($text, ':');
if ($pos !== false) {
   $username = substr($text, 0, $pos);
   $message  = substr($text, $pos +1);
}

这里真的不需要正则表达式,正则表达式很慢而且如果你不熟悉也不容易找不到,所以你最好尽可能使用字符串函数。

你应该使用cdhowie answer而不是

答案 1 :(得分:3)

我会使用explode()

执行此操作
$pieces = explode(':', $text, 2);

if (count($pieces) != 2) {
    # Malformed message
}

$username = $pieces[0];
$message = $pieces[1];

如果你也想要这个消息,那么一次提取这两个部分(IMO)比使用正则表达式或substr更具可读性。

如果有可选的空格填充,您可以考虑通过trim()运行结果字符串。

答案 2 :(得分:2)

explode()会更好,然后你可以使用用户名和推文。

$ tweet = explode(“:”,$ text);

$ text [0]会给你用户名,$ text [1]会给你推文。

答案 3 :(得分:0)

对于这样一个简单的任务,您不需要正则表达式。到目前为止,只需搜索冒号并提取字符:

$str = 'UsernameIwanttoget:This is the twitter message...';
$pos = strpos($str, ':');
if (!$pos)
{
  // Something went wrong: $str doesn't have the expected format!
}
else
{
  $username = substr($str, 0, $pos);
}

答案 4 :(得分:0)

您也可以使用explode()

示例:

$stuffIWant  = "UsernameIwanttoget:This is the twitter message....";
$pieces = explode(":", $stuffIWant);
echo $pieces[0]; // piece1

答案 5 :(得分:0)

怎么样:

preg_match("/([a-zA-Z0-9\\-]*)(\\s)*:/", $string, $result);

这将为您提供所有字母数字字符(和破折号),但不会匹配文本与“:”之间的任何空格

所以$ result [1]会有匹配的字符串

答案 6 :(得分:0)

yokoloko和flinch说的是真的,但是为了答案:

$str = 'UsernameIwanttoget:This is the twitter message...';
preg_match('/([A-Z0-9]+)[^\s]:/i', $str, $matches);

//if something could be matched, $matches[1] contains the matched part
$username = $matches[1];
//etc...