假设我希望在来自:
的一些针char [{1}}之后返回所有字符 'x'
。
通常我会这样做:
$source_str = "Tuex helo babe"
你知道更好/更聪明(更优雅的方式)吗?
不使用不会使它更优雅且可能也更慢的正则表达式。
不幸的是我们做不到:
if( ($x_pos = strpos($source_str, 'x')) !== FALSE )
$source_str = substr($source_str, $x_pos + 1);
因为找不到$source_str = substr(source_str, strpos(source_str, 'x') + 1);
时'x'
会返回strpos
(而不是JS中的FALSE
)。
-1
将评估为零,并且第一个字符将始终被切断。
谢谢,
答案 0 :(得分:11)
您的第一种方法很好:检查x
是否包含strpos
,如果是,请substr
获取任何内容。
但您也可以使用strstr
:
strstr($str, 'x')
但是,当它返回开头 x
的子字符串时,请使用substr
获取x
之后的部分:
if (($tmp = strstr($str, 'x')) !== false) {
$str = substr($tmp, 1);
}
但这要复杂得多。因此,请改用strpos
方法。
答案 1 :(得分:4)
正则表达式会让它变得更加优雅:
// helo babe
echo preg_replace('~.*?x~', '', $str);
// Tuex helo babe
echo preg_replace('~.*?y~', '', $str);
但你总是可以尝试这个:
// 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);
答案 2 :(得分:0)
if(strpos($source_str, 'x') !== FALSE )
$source_str = strstr($source_str, 'x');
不太优雅,但开头没有x
:
if(strpos($source_str, 'x') !== FALSE )
$source_str = substr(strstr($source_str, 'x'),1);
答案 3 :(得分:0)
我需要这个,并努力将它保持在一条线上以获得乐趣:
ltrim(strstr($source_str, $needle = "x") ?: $source_str, $needle);
ternary operator
在5.3中进行了调整,以实现这一目标。
从PHP 5.3开始,可以省略三元运算符的中间部分。表达式expr1?:expr3如果expr1的计算结果为TRUE则返回expr1,否则返回expr3。
NB。 ltrim
将修剪字符串开头的多个匹配字符。
答案 4 :(得分:-1)
附加' - '在$item
的末尾,所以它始终在' - '之前返回字符串。即使$item
也不包含' - ',因为默认情况下,strpos会返回' - '的第一次出现的位置。
substr($item,0,strpos($item.'-','-'))