我想从字符串中提取一个变量的第一个单词,例如,对于以下输入:
<?php $myvalue = 'Test me more'; ?>
我需要的输出结果应该是输入内容的第一个单词Test
。我该如何做到这一点?
我想从字符串中提取一个变量的第一个单词,例如,对于以下输入:
<?php $myvalue = 'Test me more'; ?>
我需要的输出结果应该是输入内容的第一个单词Test
。我该如何做到这一点?
有一个字符串函数(strtok),可以根据某些分隔符将字符串分割成更小的字符串(tokens)。对于本主题,可以通过在空格字符上进行tokenize来获取Test me more
的第一个单词(定义为在第一个空格字符之前的任何内容)。
<?php
$value = "Test me more";
echo strtok($value, " "); // Test
?>
更多详细信息和示例,请参阅strtok PHP手册页面。
strtok
是一个奇怪而且危险的函数,它保存了一个全局状态。不建议使用这个函数。 - Arnold Daniels你可以使用explode函数,方法如下:
$myvalue = 'Test me more';
$arr = explode(' ',trim($myvalue));
echo $arr[0]; // will print Test
另一个例子:
$sentence = 'Hello World this is PHP';
$abbreviation = explode(' ', trim($sentence ))[0];
echo $abbreviation // will print Hello
explode(' ',trim($myvalue))[0]
来实现。这将返回字符串中以空格分隔的第一个单词,并去除前后空格。 - Elly Postlist($firstword) = explode(' ', trim($myvalue), 1);
意思是将变量 $myvalue
中的第一个单词提取出来,赋值给变量 $firstword
。如果 $myvalue
中包含多个单词,则忽略后面的内容。 - Cédric Françoys如果您有 PHP 5.3
$myvalue = 'Test me more';
echo strstr($myvalue, ' ', true);
请注意,如果$myvalue
是一个只有一个单词的字符串,strstr
在这种情况下不会返回任何内容。解决方法可以是向测试字符串追加一个空格:
echo strstr( $myvalue . ' ', ' ', true );
即使字符串中只有一个单词,这将始终返回字符串的第一个单词。
另一种选择是类似于:
$i = strpos($myvalue, ' ');
echo $i !== false ? $myvalue : substr( $myvalue, 0, $i );
或者使用 explode 函数,使用它的答案非常多,我就不再赘述如何使用了。
strstr
自PHP 4.3.0
版本以来就可用,但在5.3.0
之前,它并没有添加可选参数before_needle
(您在此示例中使用)。这只是一个提示,因为我曾经困惑过,为什么您会声明此示例需要5.3.0
。 - trejderecho $i === false ? $myvalue : substr( $myvalue, 0, $i );
吗? - But those new buttons though..你可以这样做
echo current(explode(' ',$myvalue));
虽然可能有点晚,但是 PHP 有一个更好的解决方案:
$words=str_word_count($myvalue, 1);
echo $words[0];
与已接受的答案类似,但少了一步:
$my_value = 'Test me more';
$first_word = explode(' ',trim($my_value))[0];
//$first_word == 'Test'
如果你不确定字符串是否以单词开头...
$input = ' Test me more ';
echo preg_replace('/(\s*)([^\s]*)(.*)/', '$2', $input); //Test
trim($input)
即可。 :P - zanderwar\s*
。我也不会写[^\s]
,因为\S
更简单。我也不会捕获结尾的.*
。这个答案对于这么小的代码片段做了太多不必要的事情。 - mickmackusa<?php
$value = "Hello world";
$tokens = explode(" ", $value);
echo $tokens[0];
?>
只需使用explode函数获取输入的每个单词并输出结果数组的第一个元素。
$string = ' Test me more ';
preg_match('/\b\w+\b/i', $string, $result); // Test
echo $result;
/* You could use [a-zA-Z]+ instead of \w+ if wanted only alphabetical chars. */
$string = ' Test me more ';
preg_match('/\b[a-zA-Z]+\b/i', $string, $result); // Test
echo $result;
你好,Ciul
。[a-zA-Z]
或者你正在使用\w
,为什么要使用i
模式修饰符?如果第一个“单词”包含撇号或连字符,输出应该是什么?这是值得思考的问题。这个未经解释的答案教授了一些不必要的东西。 - mickmackusa<?php
$myvalue ="Test me more";
$result=split(" ",$myvalue);
echo $result[0];
?>
split()
没有限制,因此这种技术会过度运作。它只需要在第一个出现的空格上分裂,才能正确地完成工作。 - mickmackusa
s($str)->words()[0]
很有用,它可以在这个独立库中找到。 - caw