[英]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.