假设我有 <?php
v1="cat";
v2="dog";
v3="turtle";
v4="duck";
$animals = array();
for ($i=1; $i<5; $i++) {
$animals[]=$ {"v$i"};
}
print_r ($animals);
?>
,我希望它成为hell0 w0rld
。
我尝试了hell00 w0rld
,但只替换sed s/0/00/
,它不适用于0
,我该怎么办才能替换任何第一个数字,而不只是he1lo wor1d(he11lo wor1d)
?
谢谢!
答案 0 :(得分:1)
由于您不想仅匹配0
,而是想匹配任何数字,因此您需要使用[0-9]
。这代表“任何一个数字0-9”。你把它放在括号中“捕获”它,在替换字符串中,你可以添加反射:
$ sed 's/\([0-9]\)/\1\1/' <<< "he1lo wor1d"
he11lo wor1d
如果您想重复第一个数字(根据标题)而不仅仅是数字,则将\+
附加到您的角色类。这代表“其中一个或多个”:
$ sed 's/\([0-9]\+\)/\1\1/' <<< "he12o wor1d"
he1212o wor1d
与捕获组\1
匹配的后向引用/(.../)
的替代方法是使用&
,代表完全匹配,即
sed 's/[0-9]/&&/' <<< "he1lo wor1d"
和
sed 's/[0-9]\+/&&/' <<< "he12lo wor1d"
不再需要/(.../)
。