regex - 如何在一个字母之前只获取一个字符串中的一个特殊字符并在它们之间插入一个逗号?
问题描述
我正在尝试在字符串之间插入逗号,例如hello)))how are you
,我只想在)
+ 字母之间插入逗号,我的意思是,hello))),how are you
。
如何使用正则表达式和来做到这一点preg_replace
?
我试过使用"/(\)+[a-z]){1}/g"
,但它需要所有的)
,而不仅仅是字母前的第一个。
解决方案
您可以使用
$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 组中的值。
推荐阅读
- javascript - 如何将递归 java 脚本逻辑转换为 typescript/angular
- javascript - 在反应中切换按钮时无法查看数据。没有错误
- database - 如何设计这个 NoSQL DB
- llvm - 使用 LLVM 通道混淆整数常量
- python - 查找两个数组之间变化值的索引
- python - 创建一个 Python 类,它既可以返回自身的表示,也可以使用计算结果调用
- matlab - MATLAB 图形通过旋转 3D 对象严重缩放
- android - 如何使用新的 android jetpack 导航保存底部导航视图片段的状态?
- aws-lambda - 为什么“dotnet lambda deploy-function”不能从 Azure DevOps 工件源中提取包?
- android - Android导航组件:java.lang.IllegalStateException:还原期间的未知目的地