我想从字符串中分割单词。例如,我的字符串是“在#name of god”中,我只需要“名字”!! 但是当我使用这个snipet时,请给我“上帝的名字”
$string = "In the #name of god";
$word = explode( '#', $string );
echo $word;
答案 0 :(得分:5)
$string = "In the #name of god";
// Using `explode`
$word = @reset(explode(' ', end(explode( '#', $string ))));
echo $word; // 'name'
// Using `substr`
$pos1 = strpos($string, '#');
$pos2 = strpos($string, ' ', $pos1) - $pos1;
echo substr($string, $pos1 + 1, $pos2); // 'name'
注意:
@
功能之前的reset
字符是Error Control Operators。使用带有非引用变量的end
函数时,它可以避免显示警告消息,是的,这是一种不好的做法。您应该创建自己的变量并传递给end
函数。像这样:
// Using `explode`
$segments = explode( '#', $string );
$segments = explode(' ', end($segments));
$word = reset($segments);
echo $word; // 'name'
答案 1 :(得分:1)
尝试正则表达式和preg_match
$string = "In the #name of god";
preg_match('/(?<=#)\w+/', $string, $matches);
print_r($matches);
输出:
Array ( [0] => name )
答案 2 :(得分:0)
对不起,我刚才错了。
Explode将String转换为Array。 所以你的输出会产生[&#34;在&#34;,&#34;上帝的名字&#34;]。如果你想在它上面说一句话,你需要更具体地说明它是如何工作的。如果您只想在主题标签后面找到第一个单词,则应使用strpos和substr。
<table>
<tr>
<td>
<img src="@Url.Action("ApplicationPieChart")" />
</td>
</tr>
</table>
答案 3 :(得分:0)
有几个选项(preg_match也可以帮助多个&#39;#&#39;)
<?php
//With Explode only (meh)
$sen = "In the #name of god";
$w = explode(' ', explode('#',$sen)[1])[0];
echo $w;
//With substr and strpos
$s = strpos($sen , '#')+1; // find where # is
$e = strpos(substr($sen, $s), ' ')+1; //find i
$w = substr($sen, $s, $e);
echo $w;
//with substr, strpos and explode
$w = explode(' ', substr($sen, strpos($sen , '#')+1))[0];
echo $w;
答案 4 :(得分:0)
在我自己的项目中,我当然会避免进行少量函数调用来复制一个 preg_
函数调用所能完成的工作。
实际上,匹配文字 #
,然后用 \K
“忘记”它,然后匹配一个或多个非空白字符。如果字符串中有匹配项,则通过索引 0
访问完整字符串匹配项。
代码:(Demo)
$string = "In the #name of god";
echo preg_match('~#\K\S+~', $string, $match) ? $match[0] : '';
// output: name