Sed将替换<;?使用<;?php

Sed将替换<;?使用<;?php,php,regex,sed,Php,Regex,Sed,我有一些非常旧的代码(PHP5.1),需要在更新的服务器上运行 新服务器有PHP5.6,所以 <? 您可以执行以下操作: sed 's/<?\(php\)*/<?php/g' file sed's/bluh'; $result=''; foreach(token\u get\u all($str)作为$tok){ $result.=($tok[0]==376)?“你可以试试这个 正则表达式: ^<\?([^p\=])/gm ^[^php]不匹配任何不等于php

我有一些非常旧的代码(PHP5.1),需要在更新的服务器上运行

新服务器有PHP5.6,所以

<?
您可以执行以下操作:

sed 's/<?\(php\)*/<?php/g' file
sed's/bluh';
$result='';
foreach(token\u get\u all($str)作为$tok){
$result.=($tok[0]==376)?“你可以试试这个

正则表达式:

^<\?([^p\=])/gm  

^
[^php]
不匹配任何不等于
php
的文本,它只匹配
p
h
的1个字符。嗯,你不能用sed正则表达式可靠地做到这一点,因为它不支持lookarounds。正确的正则表达式应该是这样的
我不知道它不支持负lookarounds。看起来像我必须用Python编写这个脚本……谢谢,先生们。
@abracadver:from php手册:“5.4.0我不知道SED的标记,但是为什么不替换
,因为那里有时有空白,有时没有。@abracadver:使用
[:blank:]是个好主意。”
取代了
\s
,但我不记得
是否被允许。我喜欢“得到所有我不知道的东西”这个标记!而
变成了
这几乎对我有效。我正试图在一个巨大的文件夹中运行此脚本,在这两种情况下它们都不起作用,我还将er改为^
<?
<?php
cat file.php | sed -i 's/<?([^php])/<?php\$1/g'
<?=$_COOKIE...
<?php=$_COOKIE...
sed 's/<?\(php\)*/<?php/g' file
sed 's/<?\([[:space:]]\)/<?php\1/g' file
echo 'abc <? def';
echo 'abc <?php def';
$str = 'echo "blah"; <? echo "sblub"; ?> bluh';

$result = '';

foreach(token_get_all($str) as $tok) {
    $result .= ($tok[0] == 376) ? '<?php' : $tok[1]; 
}

echo $result;
^<\?([^p\=])/gm  
<?php$1