Mar*_*aio 17 php substr strpos
让我们说我希望在一些针头char之后返回所有字符'x':
$source_str = "Tuex helo babe".
通常我会这样做:
if( ($x_pos = strpos($source_str, 'x')) !== FALSE )
$source_str = substr($source_str, $x_pos + 1);
Run Code Online (Sandbox Code Playgroud)
你知道更好/更聪明(更优雅的方式)吗?
不使用regexp不会使它更优雅,也可能更慢.
不幸的是我们做不到:
$source_str = substr(source_str, strpos(source_str, 'x') + 1);
Run Code Online (Sandbox Code Playgroud)
因为什么时候'x'找不到strpos返回FALSE(而不是-1像JS那样).
FALSE将评估为零,并且第一个字符将始终被切断.
谢谢,
Gum*_*mbo 12
你的第一种方法很好:检查是否x包含,strpos如果是,那么在它之后得到任何东西substr.
但你也可以使用strstr:
strstr($str, 'x')
Run Code Online (Sandbox Code Playgroud)
但是,当这返回以字符串开头的子字符串时 x,使用substr以获取后面的部分x:
if (($tmp = strstr($str, 'x')) !== false) {
$str = substr($tmp, 1);
}
Run Code Online (Sandbox Code Playgroud)
但这要复杂得多.所以请改用你的strpos方法.
正则表达式会使它更加优雅:
// helo babe
echo preg_replace('~.*?x~', '', $str);
// Tuex helo babe
echo preg_replace('~.*?y~', '', $str);
Run Code Online (Sandbox Code Playgroud)
但是您可以随时尝试以下操作:
// helo babe
echo str_replace(substr($str, 0, strpos($str, 'x')) . 'x', '', $str);
// Tuex helo babe
echo str_replace(substr($str, 0, strpos($str, 'y')) . 'y', '', $str);
Run Code Online (Sandbox Code Playgroud)