【问题标题】:Remove a word at the beginning of a string [duplicate]删除字符串开头的单词[重复]
【发布时间】:2013-06-21 11:38:02
【问题描述】:
$str = "hello world, what's up";

如何检查$str 以查看是否有单词“hello”,并且仅当它位于字符串的开头(前5 个字母)时才将其删除?

【问题讨论】:

  • 你错过了; ;-) 做“正确”。
  • 只是 "A" 可能的欺骗?天哪,字面上肯定有成千上万!

标签: php regex string


【解决方案1】:

你可以使用substr,也就是faster thanpreg_replace

$str = "hello world, what's up?";
$pre = "hello ";

if(substr($str, 0, strlen($pre)) === $pre)
    $str = substr($str, strlen($pre));

echo $str;    // world, what's up?

【讨论】:

  • 如果您如此关心速度,而不是代码可读性,为什么strlen($pre) 两次?将其保存在变量中。或者在这种情况下,为什么不直接将其设为 5?
  • 我几乎直接从我链接的副本中提取了这个例子。不过建议很好!
  • +1 表示 not 使用正则表达式
【解决方案2】:

^ 表示字符串的开头,i 标志用于根据@Havenard 的注释进行不区分大小写的匹配。

preg_replace('/^hello/i', '', $str);

【讨论】:

  • 还带有/i 标志以进行不区分大小写的匹配。
【解决方案3】:

preg_replace('/^hello\b/U', '', $str);

这将替换“hello world”中的“hello”,但不会替换“helloworld”中的“hello”。因为它只替换字符串开头的一个实例,所以 cpu 使用量可以忽略不计。

【讨论】:

  • 你为什么要放/U?你不使用量词!不过\b 是个好主意。我你很热,你可以删除之后的空间。
  • 你是对的,在这种情况下,不贪婪的'U'是不必要的,这是不习惯的。
猜你喜欢
  • 2018-08-14
  • 2018-12-22
  • 1970-01-01
  • 2012-03-14
  • 1970-01-01
  • 2020-12-12
  • 2013-08-11
相关资源
最近更新 更多