繁体   English   中英

用正则表达式替换字符串中的重复子字符串模式

[英]Replace repeating substring pattern from string with regex

我有以下字符串:

"Canal Capital(Canal Capital) Felipe Cano - Recursos Humanos - fcano@sample.com - (Canal Capital) Andres Zapata - Tecnologías de la Información - zapatacano@sample.com - 3212032851(Canal Capital) Miguel Cabo - Canal Capital - cabop@gsample.com - 457 83 00 Ext. 5227 301 734 07 56"

我希望能够删除字符串中的重复图案,因此,如果该图案是(Canal Capital) ,则应该以:

"Canal Capital Felipe Cano - Recursos Humanos - fcano@sample.com - Andres Zapata - Tecnologías de la Información - zapatacano@sample.com - 3212032851 Miguel Cabo - Canal Capital - cabop@gsample.com - 457 83 00 Ext. 5227 301 734 07 56"

到目前为止,我已经尝试过了(如果模式仅重复一次,则可以使用):

$cadena = preg_replace("/\(.*\)/", "", $cadena);

但是,我仅获得"Canal Capital"的第一部分。 我可以用正则表达式实现我的目标吗? 也许有一种我不知道的更好的方法来完成此任务。 谢谢。

您可以使用以下模式作为

/(?<=[\w-\s\S])(\(.*?\))(?=[\w\s\S])/
  • (?<=[\\w-\\s\\S])正向隐藏- [\\w-\\s\\S]匹配下面列表中存在的单个字符
  • \\(匹配字符(从字面上
  • .*? 匹配任何字符(except newline)
  • \\) )从字面上匹配字符)
  • (?=[\\w\\s\\S])正向超前行- [\\w\\s\\S]匹配以下列表中存在的单个字符

所以代码看起来像

$res = preg_replace('/(?<=[\w-\s\S])(\(.*?\))(?=[\w\s\S])/', '', 'Canal Capital(Canal Capital) Felipe Cano - Recursos Humanos - fcano@sample.com - (Canal Capital) Andres Zapata - Tecnologías de la Información - zapatacano@sample.com - 3212032851(Canal Capital) Miguel Cabo - Canal Capital - cabop@gsample.com - 457 83 00 Ext. 5227 301 734 07 56');
echo $res;

或者您可以简单地将其用作

/(\(.*?\))/

演示

正则表达式

您快要接近了,您只是错过了? 使贪婪匹配器成为非贪婪(惰性)的量词。

尝试这样:

(\(.*?\))

结果:

Canal Capital Felipe Cano-人力资源-fcano@sample.com-Andres Zapata-Tecnologíasde laInformación-zapatacano@sample.com-3212032851 Miguel Cabo-Canal Capital-cabop@gsample.com-457 83 00分机。 5227 301 734 07 56

演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM