gpt4 book ai didi

php - 如何在 PHP 中用单个标点符号替换所有重复的标点符号?

转载 作者:可可西里 更新时间:2023-11-01 00:43:13 24 4
gpt4 key购买 nike

有没有一种有效的方法可以用单个字符替换所有重复的非字母数字字符?

这个问题迫使人们明确标点符号:

PHP - Removing Duplicate Punctuation?

像这样:

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

是否有可能实现相同的结果,但对于所有非字母数字字符而不明确地按名称引用它们?

这是一个用例:

Hello...  how   are you!!??  I''m bored!!----!!!&&&&&^^^^%%%(()))((<<<<<

Hello. how are you!? I'm bored!-!&^%()(<

更新

不幸的是,上面的内容在一个用例中切得太深了:http://。如何让 url 保持双 /(或者只是当它们遵循 : 时),但不允许定期重复 / 或什至超过 2 /: 之后。这是一个用例:

My ////favorite//// site is http://///example.com!!!!!!!

变成:

My /favorite/ site is http://example.com!

最佳答案

您可以使用:

$str = preg_replace('~((?<!:)[^\p{L}\p{N}])\1+~u', '$1', $str);
//=> Hello. how are you!? I'm bored!-!&^%()(<

RegEx Demo

  • [^\p{L}\p{N}] - 匹配除 unicode 字母数字字符以外的任何字符
  • (?<!:) - 只有在前面没有 : 时才匹配照顾http://...
  • ([^\p{L}\p{N}]) - 在第 1 组中捕获上面的内容以供反向引用
  • \1+ - 匹配捕获组 #1 中的一个或多个,从而确保匹配 2 个或更多相同的非字母数字
  • 将其替换为 $1即捕获的非字母数字字符

关于php - 如何在 PHP 中用单个标点符号替换所有重复的标点符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27951597/

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