这是我的字符串示例。
$x = "John Chio - Guy";
$y = "Kelly Chua - Woman";
我需要正则表达式替换的模式。$pattern = ??
$x = preg_replace($pattern, '', $x);
谢谢
无需使用正则表达式。您可以使用 explode
函数:
$str = array_shift(explode('-', $str));
$str = substr($str, 0, strpos($str, '-'));
可能需要结合trim
函数来去除前后空格。
更新:正如@Mark所指出的那样,如果您要获取的部分包含 -
, 这种方法将失败。这完全取决于您的输入情况。
因此,假设您想要删除最后一个破折号之后的所有内容,您可以使用strrpos
函数,该函数可查找子字符串的最后一个出现位置:
$str = substr($str, 0, strrpos($str, '-'));
所以你看,这里不需要正则表达式 ;)
如果你想在代码中删除第一个连字符后面的所有内容,可以使用以下正则表达式:
"/-.*$/"
"/-[^-]*$/"
您还可以将其与从结果末尾修剪空格相结合:
"/\s*-[^-]*$/"
strstr( "John Chio - Guy", "-", true ) . '-';
true
告诉函数返回第二个参数第一次出现之前的所有内容。
源自php.net的strstr()函数说明。$pattern1='/.+(?=\s-)/' //This will match the string before the " -";
$pattern2='/(?<=\s-\s).+/' //This will match the string after the "- ";
使用explode或regexp会有些过度,可以尝试这个:
$str = substr($str, 0, strpos($str,'-'));
或者在这里的答案中使用strtok版本。
使用 strstr
函数。
示例:
$my_string = "This is my best string - You like it?";
$my_new_string = strstr($my_string, '-', true);
echo($my_new_string);
-
后面的所有内容。但考虑到问题的结构,可以通过在“ - ”(空格减空格)上分裂来解决这个问题。 - Felix Klingsubstr
这个第二种选择,因为在PHP 5.3中,使用array_shift
选项会导致"只有变量可以通过引用传递"的警告。 - crmpicco