我有以下字符串:
"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]
匹配下面列表中存在的单个字符 -
'(
匹配字符(
的字面意思 -
')
匹配字符)
的字面意思 -
(?=['w's'S])
正向前看-['w's'S]
匹配下面列表中存在的单个字符
.*?
匹配任意字符(except newline)
代码看起来像
$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