gpt4 book ai didi

PHP - 删除重复的标点符号?

转载 作者:行者123 更新时间:2023-12-04 18:21:42 26 4
gpt4 key购买 nike

假设您有以下字符串:Hello... how are you!!?? I'm bored!!
我希望尽可能删除背靠背的标点符号,并在出现类似于“!?”的情况时保留问号。过滤后的字符串应如下所示:
Hello. how are you? I'm bored!
最佳答案是解决此问题的最简洁的解决方案。我希望正则表达式将是解决这个问题的最佳方法,但是我对正则表达式的了解最多非常非常有限,而且我不知道如何解决这个问题。但是,我对非正则表达式解决方案非常满意!对您提供的任何代码的解释(除非非常简单)也会很好。

谢谢!

最佳答案

$str = preg_replace('~[?!]{2,}~', '?', preg_replace('~([.,!?])(\\1+)~', '\\1', $str));

或在一个 preg_replace调用(感谢 Alix Axel)
$str = preg_replace(array('~([.,!?])(\\1+)~', '~[?!]{2,}~'), array('\\1', '?'), $str);

只需在大括号中列举您关心的所有标点符号

更新 : 处理 !?用另一个正则表达式嵌套它

解释这一切意味着什么:
preg_replace('~([.,!?])(\\1+)~', '\\1', $str)

表达式 ([.,!?])(\\1+)表示 - 查找 .,!? 中的任何一个仅当它前面至少有一个相同的字符 \\1+ , 其中 \\1 - 是对上一场比赛的引用, +at least one .

并仅用单个字符替换所有这些。

外部表达式 [?!]{2,}表示 find all ? or ! if they are at least 2 in a row并将其替换为 ?

关于PHP - 删除重复的标点符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10545303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com