删除 php 中分隔符后的部分字符串

remove part of string after delimiter in php

我看过其他的 我有一个字符串 " cccc cccc - fff"

我需要 return "cccc cccc" 我也不需要定界符 我试图回应的结果 substr($mystring , 0, strpos($mystring , "-")); 但它 return 没什么 我也试过

list($result, $trash) =split('-', $mystring);

 echo $result;
 echo $trash;

结果 returned 主字符串和垃圾没有结果

更新: 我正在使用 wordpress,但由于某种原因它无法正常工作。 我需要 trim 我的标题,我正在使用 get_the_title() 并且我正在尝试 trim it

$mystring =get_the_title();

list($result, $trash) =split('-', $mystring); 
 echo $result;
$mystring=" cccc cccc - fff";
$result = explode("-",  $mystring);

echo $result[0];

输出为:cccc cccc

试试这个,检查 live demo here

echo trim(explode("-", " cccc cccc - fff -888")[0]);

阅读 ShiraNai7 的评论后,您似乎需要一个基于正则表达式的解决方案。我已经根据您的输入以及 ShiraNai7 的不同版本的破折号测试了我的模式。

模式(Demo):/^ +\K[\w ]+(?= )/

解释:

  • / - 开始模式
  • ^ - 从字符串的开头开始匹配
  • + - 匹配一个或多个 spaces 个字符(+号前有文字 space)
  • \K - 忽略之前匹配的字符,从这里开始匹配。
  • [\w ]+ - 匹配一个或多个字母数字、下划线或 space
  • 字符
  • (?= ) - "positive lookahead" 没有捕获它匹配的内容;用于在分隔符 (dash/hyphen/whatever)
  • 之前的最终 space 之前停止匹配
  • / - 结束模式

方法(Demo):

$my_string=" cccc cccc - fff";
$result=preg_match('/^ +\K[\w ]+(?= )/',$my_string,$out)?$out[0]:$my_string;  // if can't extract, use full string
echo $result;

输出:

cccc cccc

如果这是我的项目,我不会使用正则表达式,我会使用 strstr()(同样,请确保您使用的是适当的连字符)。

echo trim(strstr($my_string,'-',true));

strstr() 将 "before_needle"(第三个参数)设置为 true 将 return 连字符之前的子字符串。然后只需 trim() 关闭前导和尾随白色-spaces.

或者,explode 也同样有效,它只是在提取所需的子字符串之前生成一个数组:

echo trim(explode('-',$my_string,2)[0]);  // don't bother generating more than one element - you only want the first anyhow

substr("cccc cccc - fff", 0, 10)