使用PHP截取符号前的字符串

12
我该如何使用PHP截取括号前的字符串?
例如:$a = "abc dec g (gold)"; 我该怎样才能将字符串截取为"abc dec g"?
我尝试使用strstr($a, '(', true)但是出现了错误提示。
4个回答

31
你可以使用explode来实现这个功能。
list($what_you_want,) = explode('(', $str, 2);

或者你也可以使用 substrstrpos 来执行此操作:

$what_you_want = substr($str, 0, strpos($str, '('));

你使用strstr时出现错误的原因是,除非你使用的是PHP 5.3.0或更高版本,否则最后一个参数是不可用的。


1
你甚至不需要一个$garbage变量:list($what_you_want, ) = explode('(', $str, 2);同样可以工作。 - hbw
另外,他说strstr($str, '(', true); 不起作用,所以我认为他没有5.3.0…… - hbw
糟糕,不要在意我上一个评论——我可能没有注意到修改。 - hbw
1
一切都很好。似乎PHP允许在列表中使用尾逗号这种做法,这相当不同寻常,我有点震惊它竟然能运行。我猜这是个好事情,知道了也好。 - Paolo Bergantino
完美的解决方案 ;) - Mohammad Alabed

6
$a=substr($a, 0, strpos($a, '('));

2

关于strstr怎么样:

$topic = strstr('一些主题:: 要排除的部分', '::', TRUE);

然后

$topic = 一些主题

编辑:对的...仅限5.3+


1

使用这段代码确实是一个不错的解决方案:

$what_you_want = substr($str, 0, strpos($str, '('));

不过,我想指出的是它会在第一个“(”处截断字符串。如果你想要在最后一个“(”处截断字符串,你应该使用

$what_you_want = substr($str, 0, strrpos($str, '('));

我发现在抓取HTML内容时经常会出现这种情况,例如由于嵌套标签的原因。

祝好, 琼


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接