【问题标题】:Trim a full string instead of using trim() with characters修剪完整的字符串,而不是使用带有字符的 trim()
【发布时间】:2014-04-28 19:06:56
【问题描述】:

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

我一直在想这个:

PHP trim() 将修剪空白或某些字符。但是如果我想修剪完整的字符串怎么办,像这样:

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

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

我想要的是这个:

$data = 'cookieDELIMITERchocolate';

感谢您的建议!

【问题讨论】:

    标签: php regex


    【解决方案1】:
    $data = 'cookieDELIMITERchocolateDELIMITER';
    $data = preg_replace('/^(DELIMITER)*|(DELIMITER)*$/', '', $data);
    
    var_dump($data);
    // string(24) "cookieDELIMITERchocolate"
    

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


    完整的正则表达式解释

    ^                # 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

    【讨论】:

    【解决方案2】:

    如果您使用它来避免在 explode() 之后出现空数组元素,请尝试以下操作:

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

    【讨论】:

    • 很好的解决方案。
    • @Chris - 这将删除所有 DELIMITER 文本,而不仅仅是字符串末尾的任何文本。
    • @JaredFarrish:是的,如果您阅读了他们想要在分隔符爆炸之前删除最后一个分隔符的问题。所以我把它们结合起来。
    猜你喜欢
    • 2019-10-12
    • 1970-01-01
    • 2015-09-06
    • 2012-11-05
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多