如何在字母前只获取字符串中的一个特殊字符并在它们之间插入逗号?

How to get just one special character in a string before a letter and insert a comma between them?

我想在字符串之间插入一个逗号,例如 hello)))how are you,我只想将它插入 ) + 字母之间,我的意思是 hello))),how are you

如何使用正则表达式和 preg_replace 执行此操作?

我试过使用 "/(\)+[a-z]){1}/g" 但它占用了所有 ),而不仅仅是字母前的第一个。

您可以使用

$result = preg_replace('~\)+\K(?=[a-z])~', ',', $s);

regex demo。不区分大小写的变体:'~\)+\K(?=[a-z])~i'.

详情

  • \)+ - 匹配 1+ ) 个字符
  • \K - 从 match
  • 中省略匹配的 ) 个字符
  • (?=[a-z]) - 要求在当前位置的右侧紧接一个小写字母,而不将其添加到匹配值中。

选择:

$result = preg_replace('~(\)+)([a-z])~', ',', $s);

参见 this regex demo。不区分大小写的变体:'~(\)+)([a-z])~i'.

这里,(\)+)([a-z]) 将右括号捕获到第 1 组,然后将字母捕获到第 2 组,替换为第 1 组中的值 + , + 第 2 组中的值。

正则表达式:

(\))([^)])

替换字符串:

,

测试here.


上面的正则表达式找到一个 ) 后跟任何不是 ) 的东西。如果您只想将查找限制为字母,您可以将正则表达式更改为:

(\))([a-zA-Z])