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


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]) Positive Lookbehind - ['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;

或者你可以直接使用

/('(.*?'))/

正则表达式

你几乎接近了,你只是错过了?量词,它使贪婪匹配器,非贪婪(懒惰)。

试试:

('(.*?'))

,结果:

运河首都费利佩·卡诺-人力资源- fcano@sample.com -安德烈斯·萨帕塔- Tecnologías de la Información - zapatacano@sample.com- 3212032851米格尔卡波-运河之都- cabop@gsample.com - 457 8300 Ext. 5227 301 734 07 56

演示