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

PHP正则表达式:获取从字符串开始到';的所有文本:';,php,regex,Php,Regex,可能的重复项: 我需要从twitter rss源获取用户名。 我从提要返回这个数据作为标题,我想提取用户名 UsernameIwanttoget:This is the twitter message.... 因此,基本上,在“:”之前获取所有文本 这里并不真正需要正则表达式,正则表达式速度慢,如果您不熟悉,也不容易让人无法理解,所以您最好尽可能使用字符串函数 你应该改用cdhowie答案 这里并不真正需要正则表达式,正则表达式速度慢,如果您不熟悉,也不容易让人无法理解,所以您最好尽可能使

可能的重复项:

我需要从twitter rss源获取用户名。
我从提要返回这个数据作为标题,我想提取用户名

UsernameIwanttoget:This is the twitter message....
因此,基本上,在“”之前获取所有文本

这里并不真正需要正则表达式,正则表达式速度慢,如果您不熟悉,也不容易让人无法理解,所以您最好尽可能使用字符串函数

你应该改用cdhowie答案

这里并不真正需要正则表达式,正则表达式速度慢,如果您不熟悉,也不容易让人无法理解,所以您最好尽可能使用字符串函数


您应该使用cdhowie-answer来代替

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

$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);
}

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

$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);
}

我会使用
explode()

如果您也需要该消息,那么用这种方法同时提取这两个部分(依我看)比使用正则表达式或
substr
更具可读性


如果有可选的空白填充,您可以考虑通过<代码> Times()来运行结果字符串< /代码> .< /P> < P> >我将用<代码>爆炸()> <代码>:

如果您也需要该消息,那么用这种方法同时提取这两个部分(依我看)比使用正则表达式或
substr
更具可读性

如果有可选的空白填充,您可以考虑通过<代码>三()来运行结果字符串。

开发()将更好,然后可以使用用户名和Twitter。

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

$text[0]将为您提供用户名,$text[1]将为您提供tweet。

explode()更好,您可以同时使用用户名和tweet

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

$text[0]将为您提供用户名,$text[1]将为您提供推文。

您也可以使用

例如:

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

例如:

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

preg_match("/([a-zA-Z0-9\\-]*)(\\s)*:/", $string, $result);
这将获得所有字母数字字符(和破折号),但不会匹配文本和“:”之间的任何空格

那么$result[1]将具有匹配的字符串

那么:

preg_match("/([a-zA-Z0-9\\-]*)(\\s)*:/", $string, $result);
这将获得所有字母数字字符(和破折号),但不会匹配文本和“:”之间的任何空格


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

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...

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...

+1没有正则表达式也更快。只在regex增加值时使用它。注意:如果你的文本类似于“name:text”,你也会得到空格+1,没有regex也会更快。只有在正则表达式增加值时才使用它。请注意:如果您的文本类似于“name:text”,那么您最终也会使用空格,这比我的答案聪明得多。@yokoloko:不过这两种方法都是有效的。如果OP只需要用户名,那么您的方法会快一点,并且使用的内存会稍微少一点。尽管我建议编辑您的示例,以优雅地处理文本中没有冒号的情况。哦,我没有注意到explode的limit参数。太酷了<代码>如果limit设置为正,则返回的数组将包含最多个limit元素,最后一个元素包含字符串的其余部分。这比我的答案聪明得多。@yokoloko:但这两种方法都是有效的。如果OP只需要用户名,那么您的方法会快一点,并且使用的内存会稍微少一点。尽管我建议编辑您的示例,以优雅地处理文本中没有冒号的情况。哦,我没有注意到explode的limit参数。太酷了
如果limit设置为正,则返回的数组将包含最多个limit元素,最后一个元素包含字符串的其余部分。
@hakre:这不是该问题的重复。
strok($mystring,:”)
--任务完成。@hakre:这不是该问题的重复。
strok($mystring,“:”)
——作业已完成。