首页 > 解决方案 > 如何在一个字母之前只获取一个字符串中的一个特殊字符并在它们之间插入一个逗号?

问题描述

我正在尝试在字符串之间插入逗号,例如hello)))how are you,我只想在)+ 字母之间插入逗号,我的意思是,hello))),how are you

如何使用正则表达式和来做到这一点preg_replace

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

标签: regexspecial-characters

解决方案


您可以使用

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

请参阅正则表达式演示。不区分大小写的变体:'~\)+\K(?=[a-z])~i'.

细节

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

选择:

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

请参阅此正则表达式演示。不区分大小写的变体:'~(\)+)([a-z])~i'.

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


推荐阅读