Php 带replace的sed正则表达式
给定一个文件:Php 带replace的sed正则表达式,php,regex,replace,sed,Php,Regex,Replace,Sed,给定一个文件: <? $dbo = mysql_fetch_assoc(); $dbo->employee_id; $dbo->employee_name; $dbo->dirt; $dbo->dirt23; $dbo->dirt_2_3; ?> 它总是返回一个错误。我曾尝试使用撇号作为容器,正确地转义所有内容,并使用正斜杠作为命令分隔符,但没有效果 结果应该是: <? $dbo = mysql_fetch_assoc(); $
<?
$dbo = mysql_fetch_assoc();
$dbo->employee_id;
$dbo->employee_name;
$dbo->dirt;
$dbo->dirt23;
$dbo->dirt_2_3;
?>
它总是返回一个错误。我曾尝试使用撇号作为容器,正确地转义所有内容,并使用正斜杠作为命令分隔符,但没有效果
结果应该是:
<?
$dbo = mysql_fetch_assoc();
$dbo['employee_id'];
$dbo['employee_name'];
$dbo['dirt'];
$dbo['dirt23'];
$dbo['dirt_2_3'];
?>
请提供帮助。如果您正在使用Mac OSX,则需要使用-E开关而不是-E开关,并使用以下命令而不是现有命令:
cat test.php | sed -E "s/dbo->([a-z_]*.*);/dbo[\'\1\']/g"
您正在转义一个不需要转义的角色,而不是转义另一个确实需要转义的角色。\uu不是正则表达式元字符,但$是(匹配字符串的结尾)。这样做:
sed -e "s|\$dbo->([\w_]*)|$dbo['\1']|g" test.php
顺便说一句,产生错误的是\\
。unscaped$不会给您一个错误,它只会使正则表达式无法匹配任何内容,因为您正在尝试匹配字符串的结尾,然后是结尾后的一些内容。但是\\
没有任何意义;必须是\\\
才能在字符类中同时包含反斜杠和下划线,或者只有\\
才能包含下划线。错误很少:
\w
已包含下划线$
需要删除$
,同时可以通过shell进行扩展sed -r 's/(\$dbo->)([[:alnum:]_]+)(.*)$/\1["\2"]\3/g'
或在OSX上:
sed -E 's/(\$dbo->)([[:alnum:]_]+)(.*)$/\1["\2"]\3/g'
使用单引号:
sed -r "\$s/(dbo->)([a-zA-Z0-9_]+)(.*)$/\1['\2']\3/g"
您可以使用此选项(基本模式):
您可以使用
mysql\u fetch\u object()
。我要离开mysql\u fetch\u对象。它比mysql\u fetch\u assoc慢,信不信由你。我想让关联数组用于与所问问题无关的特定用途。谢谢。试过了。失败。错误是:sed:-e表达式#1,char 25:s命令的RHSWorks上的无效引用\1,但唯一的问题是我想使用“而不是”导致['\2'],但转义撇号无效。我试图避免:alnum:因为我对它的另一个用法不支持它。确定您可以尝试:sed-r“\$s/(dbo->”)([a-zA-Z0-9+)()$/\1['\2']\3/g“
我将“\$s/”更改为“s/”,这是我想要的。另一个细微的更改是删除(.*)和\3:sed-r“s/(dbo->)([a-zA-Z0-9\]+)/\1['\2']/g”test.php使这行替换正确:$dbo->['employee\u name'].'.$dbo->employee_address;它不是原始文件的一部分,但…需要。感谢您和其他人!最终答案:sed-r“s/$dbo->([a-zA-Z0-9_]+)/$dbo['\1']/g”test.php-1双引号中的$dbo
将被shell替换。
sed -r "\$s/(dbo->)([a-zA-Z0-9_]+)(.*)$/\1['\2']\3/g"
sed "s/\$dbo->\([^;]\+\)/\$dbo['\1']/" file.php