修剪一个完整的字符串,而不是使用带有字符的trim()

时间:2014-04-28 19:06:56

标签: php regex

在数据字符串中使用特定分隔符时,通常我想在爆炸之前修剪掉它的最后一个实例。

我一直想知道:

PHP trim()将删除空格或某些字符。但是,如果我想修剪完整的字符串,就像这样:

$data = 'cookieDELIMITERchocolateDELIMITER';
$data = trim($data, 'DELIMITER');

以上内容不会真正起作用,因为它不会修剪字符串“DELIMITER”,而是修剪字符“D,E,L,I,M,T,R”。

我想要的是:

$data = 'cookieDELIMITERchocolate';

感谢您的建议!

2 个答案:

答案 0 :(得分:2)

$data = 'cookieDELIMITERchocolateDELIMITER';
$data = preg_replace('/^(DELIMITER)*|(DELIMITER)*$/', '', $data);

var_dump($data);
// string(24) "cookieDELIMITERchocolate"

正则表达式^(DELIMITER)*|(DELIMITER)*$将匹配字符串开头(*)的“DELIMITER”的0 +(^)个实例或(|)结尾($)字符串。 preg_replace()将采用这些匹配并将其替换为空字符串。


完整RegEx说明

^                # Matches the start of the string
  (DELIMITER)*   # Matches "DELIMITER" 0+ times, thanks to the *
|                # OR
  (DELIMITER)*   # Matches "DELIMITER" 0+ times, thanks to the *
$                # Matches the end of the string

这意味着它将在字符串的开头或结尾匹配许多DELIMITER。由于preg_replace()执行全局匹配/替换,只要它们附加到字符串的开头或结尾,它就会出现所有DELIMITER。

添加点(^(DELIMITER).*|(DELIMITER)*$)将匹配字符串的开头,然后是DELIMITER,后跟任意字符的0+(.匹配所有字符)。如果它以DELIMITER开头,则会有效replace the entire string

答案 1 :(得分:1)

如果你使用它来避免在explode()之后有一个空数组元素,试试这个:

$array = array_filter(explode('DELIMITER', $data))