如何在“ - ”之后删除字符串中的任何内容?

时间:2011-01-16 11:53:52

标签: php regex

这是我的字符串的例子。

$x = "John Chio - Guy";
$y = "Kelly Chua - Woman";

我需要reg替换的模式。

$pattern = ??
$x = preg_replace($pattern, '', $x); 

由于

7 个答案:

答案 0 :(得分:64)

不需要正则表达式。您可以使用explode

$str = array_shift(explode('-', $str));

substrstrpos

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

可能与trim结合使用以删除前导空格和尾随空格。

更新:@Mark指出,如果您要获取的部分包含-,则此操作将失败。这一切都取决于你可能的输入。

因此,假设您要删除最后短划线后的所有内容,可以使用strrpos查找子字符串的最后一次出现:

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

所以你看,没有正则表达式;)

答案 1 :(得分:9)

要删除第一个连字符后的所有内容,您可以在代码中使用此正则表达式:

"/-.*$/"

要删除最后连字符后的所有内容,您可以使用此正则表达式:

"/-[^-]*$/"

http://ideone.com/gbLA9

您还可以将其与结果末尾的修剪空白结合起来:

"/\s*-[^-]*$/"

答案 2 :(得分:6)

您可以使用strtok

$x = strtok($x, '-');

答案 3 :(得分:4)

您也可以使用。

strstr( "John Chio - Guy", "-", true ) . '-';

第三个参数true告诉函数在第一次出现第二个参数之前返回所有内容。

Source on strstr() from php.net

答案 4 :(得分:0)

我希望这些模式可以帮助你=]

$pattern1='/.+(?=\s-)/'       //This will match the string before the " -";
$pattern2='/(?<=\s-\s).+/'    //This will match the string after the "- ";

答案 5 :(得分:0)

爆炸或正则表达是一种矫枉过正,试试这个:

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

或其中一个答案中的strtok版本。

答案 6 :(得分:-1)

使用strstr功能。

示例:

$my_string = "This is my best string - You like it?";
$my_new_string = strstr($my_string, '-', true);

echo($my_new_string);