PHP substr经过一定的char,一个substr + strpos优雅的解决方案?

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


Ali*_*xel 5

正则表达式会使它更加优雅:

// 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)