我有以下字符串:
"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"
部分。我可以用正则表达式实现我的目标吗?也许有一种更好的方法来实现这一点,我不知道。感谢。
答案 0 :(得分:1)
您可以使用以下模式
/(?<=[\w-\s\S])(\(.*?\))(?=[\w\s\S])/
(?<=[\w-\s\S])
肯定的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;
或者您可以简单地将其用作
/(\(.*?\))/
答案 1 :(得分:0)
你几乎接近,你只是错过了?
量词,它使得贪婪的匹配者变得非贪婪(懒惰)。
试试这样:
(\(.*?\))
结果:
Canal Capital Felipe Cano - Recursos Humanos - fcano@sample.com - Andres Zapata - TecnologíasdelaInformación - zapatacano@sample.com - 3212032851 Miguel Cabo - 运河资本 - cabop@gsample.com - 457 83 00分机5227 301 734 07 56