Php 从分隔字符串中删除开头或结尾的逗号
这可以通过awk、sed或PHP实现。我有一个逗号分隔的字符串,我想从中删除一个值Php 从分隔字符串中删除开头或结尾的逗号,php,linux,awk,sed,Php,Linux,Awk,Sed,这可以通过awk、sed或PHP实现。我有一个逗号分隔的字符串,我想从中删除一个值 mike,suzy,carter,jason $remove_value = mike sed 's/$remove_value//' file_with_delimited_string 这给了我,苏西,卡特,杰森 $remove_value = jason sed 's/$remove_value//' file_with_delimited_string 这给了我“迈克,苏西,卡特” 如何删除错误的逗
mike,suzy,carter,jason
$remove_value = mike
sed 's/$remove_value//' file_with_delimited_string
这给了我,苏西,卡特,杰森
$remove_value = jason
sed 's/$remove_value//' file_with_delimited_string
这给了我“迈克,苏西,卡特”
如何删除错误的逗号,而不考虑删除的值的位置?这是一个包含许多逗号分隔字符串的大文件。此更改只能用于当前匹配项。我正在使用PHP在Linux服务器上编辑文本文件。您可以尝试这种简单的方法
sed "s/,\?$remove_value,\?//" FileName
若你们测试中间值,你们可以用这种方法
sed "s/,$remove_value\|$remove_value,//" FileName
如果删除行中出现的所有值,请使用g
sed "s/,$remove_value\|$remove_value,//g" FileName
示例:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
输出:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
示例:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
输出:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
示例:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
输出:
remove_value='mike'
suzy,carter,jason
remove_value='suzy'
mike,carter,jason
remove_value='jason'
mike,suzy,carter
这就行了
$remove_value = ltrim($remove_value, ',');
$remove_value = rtrim($remove_value, ',');
在php中有一种奇怪的方法:
$list = 'mike,suzy,carter,jason';
$list_array = explode(',' , $list);
$goner = 'suzy';
$goner_index = array_search($goner, $list_array);
unset($list_array[$goner_index]);
$list = implode(',', $list_array);
在php中,通过单个正则表达式
$str = "jason,mike,jason,suzy,carter,jason";
$remove_value = "jason";
echo preg_replace('~,'.$remove_value.'(?=,|$)|^'.$remove_value.',~', "", $str);
输出:
mike,suzy,carter
使用awk:
$ for replace_string in mike suzy carter jason;
do awk -v s=$replace_string '{ sub("((,|^)"s")|("s"(,|$))","") }1' a.txt;
done
suzy,carter,jason
mike,carter,jason
mike,suzy,jason
mike,suzy,carter
使用,或者如果<代码>杰森<代码>出现在中间?哦,等等……是的,如果它在中间,那就不会了。work@AvinashRaj,根据您的输入字符串,“我的命令”将仅删除第一个事件。如果您需要删除所有事件,请使用
g
标志删除所有事件。抱歉,需要使用双引号!!我通过命令行与mike、carter等进行了测试。不需要类[,]
,一个简单的,
,也不需要g
(每种情况下出现一次,如果行中可能出现几个相同的名称,至少出现第二次)@NeronLeVelu:对!将第一个“g”保留为多次出现(通用)是受欢迎的。如果-r
不可用(如posix sed),也可以用\{0,1\}
替换?