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


Regex working in RegExr, doesn't work in PHP

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

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

这是正则表达式代码:

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

在这里工作正常:

http://regexr.com?31ptt

但它不适用于 PHP,我收到奇怪的错误,例如:"未知修饰符'<'"等。

我需要做什么才能将其转换为与 PHP 一起使用?

这是我的 php 代码:

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

$myfile只是从正在扫描的受感染文件中获取的。

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

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

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

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

这似乎工作正常

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