我有以下格式的字符串:
$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';
但未按预期工作
答案 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);
然后内爆匹配