在数据字符串中使用特定分隔符时,通常我想在爆炸之前修剪掉它的最后一个实例。
我一直想知道:
PHP trim()
将删除空格或某些字符。但是,如果我想修剪完整的字符串,就像这样:
$data = 'cookieDELIMITERchocolateDELIMITER';
$data = trim($data, 'DELIMITER');
以上内容不会真正起作用,因为它不会修剪字符串“DELIMITER”,而是修剪字符“D,E,L,I,M,T,R”。
我想要的是:
$data = 'cookieDELIMITERchocolate';
感谢您的建议!
答案 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))