在RegExr中工作的正则表达式在PHP中不起作用

时间:2012-08-10 03:28:32

标签: php regex

我在RegExr中写了一个正则表达式来处理以下字符串:

<?php _on*/4353452f43f43f46 xx46 _off*/ ?>

这是正则表达式代码:

(.*<?php.*)(.*_on.*)(.*_off.*)(.*?>)

这在哪里工作正常:

http://regexr.com?31ptt

但它不适用于PHP,我得到奇怪的错误,如:“未知修饰符'&lt;'”等等。

如何将其转换为使用PHP?

这是我的PHP代码:

$virusstring = '(.*/<?php.*)(.*_on.*)(.*_off.*)(.*?>)';    
if(preg_match($virusstring,$myfile)) {
    $fixed = preg_replace($virusstring,'',$myfile);
    $blah = file_put_contents($item, $fixed);
}

$ myfile仅取自正在扫描的受感染文件。

2 个答案:

答案 0 :(得分:3)

您的正则表达式缺少分隔符。您需要添加分隔符,否则PHP将假定您的开头(是分隔符:

/(.*<\?php.*)(.*_on.*)(.*_off.*)(.*\?>)/

此外,?是一个量词,匹配前一个字符的0或1。你需要逃脱它:

(.*<\?php.*)(.*_on.*)(.*_off.*)(.*\?>)

答案 1 :(得分:1)

这似乎工作正常

preg_match("/(.*<\\?php.*)(.*_on.*)(.*_off.*)(.*\\?>)/us", $searchText)