如何替换匹配的字符串php

时间:2018-04-21 11:28:17

标签: php regex

我有以下格式的字符串:

$string ='[(id,name,top,left,width,height,depth)name|name]
  [(id,name,top,left,width,height,depth)]
  [(id,name,top,left,width,height,depth)name|name]
  [(id,name,top,left,width,height,depth)]
  [(id,name,top,left,width,height,depth)name]';

如果字符串的一部分不包含name,请从字符串中删除该部分。

所以输出就像

$output ='[(id,name,top,left,width,height,depth)name|name]
   [(id,name,top,left,width,height,depth)name|name]
   [(id,name,top,left,width,height,depth)name]';

我尝试过这样的事情

 $re = '/\[\((.*?)\)(.*?)\]/s';

但未按预期工作

2 个答案:

答案 0 :(得分:0)

您需要找到每个字符串,其中包括:

  • 以可选的“白色”字符开头,
  • 然后包含[(
  • 然后是除)之外的一系列字符(括号内的内容),
  • 然后)]之间没有任何字符(名称)

并用空字符串替换它。

所以正则表达式应该是:\s*\[\([^)]+\)\]

请注意,\n也是白色字符,因此实际上已删除:

  • 文本前面的换行符,无名称(如果有),
  • 和有问题的行(包括起始空格,如果有的话),

但不会删除终止此行的换行符(如果有)。

有关工作示例,请参阅https://regex101.com/r/NVGild/1

答案 1 :(得分:0)

$string ='[(id,name,top,left,width,height,dePPpth)name|name][(id,name,top,left,width,height,depth)][(id,name,top,left,width,height,dePPPpth)name|name][(id,name,top,left,width,height,depth)][(id,name,top,left,width,height,deppth)name]';
preg_match_all('/(\[\([a-zA-Z,]+\)name(\|name)?\])/', $string, $matches);
print_r($matches);

然后内爆匹配