正则表达式中的边界运算符 PHP 最多出现四次字符

Boundary operator in regex PHP up to four occurrences of the character

<?php 
echo preg_replace('/(?<!\pL)(.){1,4}(?!\pL)/','%','Pamiętam i tak będę z tobą jestem jestem i czuweam dfgd....');
?>

怎么办,如果jestem会有1到4个字符,不输出这个?

((?<!\pL)(?!\pL)){1,4}

我想要这样的结果:

Pamiętam jestem jestem czuweam dfgd....

您可以使用

$s = 'Pamiętam i tak będę z tobą jestem jestem i czuweam dfgd.... Teraz idę do kina. A teraz nie idę.';
echo preg_replace('/(?<!\S)\S{1,4}(?!\S)/u','%', $s);
// => Pamiętam % % % % % jestem jestem % czuweam dfgd.... Teraz % % kina. % teraz % %

图案详情:

  • (?<!\S) - 在...
  • 之前必须有一个空白符号或字符串开头
  • \S{1,4} - 1 到 4 个非空白字符
  • (?!\S) - 在这 1-4 个字符之后,必须有一个空白符号或字符串结尾。

参见PHP demo

不要忘记 /u UNICODE 修饰符,因为您正在使用 Unicode 字符串。