Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式匹配php代码中的第一个分号_Php_Regex - Fatal编程技术网

正则表达式匹配php代码中的第一个分号

正则表达式匹配php代码中的第一个分号,php,regex,Php,Regex,我有一个正则表达式,用于使用preg_match在php文件中重新定义一个常量,并使用htmlspecialchars筛选输入文件 例如 以下正则表达式有效 /define.*[&quote\']' . $constant . '[&quote;\'].*;/i 但是,它与最后一个分号匹配,在大多数情况下有效,但在以下情况下失败 例如: 请注意最后一个分号,它会将代码替换为 define("MEMBERSHIP", 'SILVER'); empty means not in u

我有一个正则表达式,用于使用
preg_match
在php文件中重新定义一个常量,并使用htmlspecialchars筛选输入文件 例如

以下正则表达式有效

/define.*[&quote\']' . $constant . '[&quote;\'].*;/i
但是,它与最后一个分号匹配,在大多数情况下有效,但在以下情况下失败 例如:

请注意最后一个分号,它会将代码替换为

define("MEMBERSHIP", 'SILVER'); empty means not in use.
这打破了密码。尝试了下面的正则表达式,但对那些使用双引号的人无效

/define.*[&quote;\']' . $constant . '[&quote;\'][^;]*;/i

知道如何解决这个问题吗?

如果在
*
之后添加
,它将变得贪婪,并占用尽可能少的字符数。所以试试看

/define.*?[&quote\']' . $constant . '[&quote;\'].*?;/i
看看它是否符合你的要求


一般来说,如果您实际上不是指任何字符,则应避免使用
s。

您可以使用以下命令匹配相应的引号:


否则,最后的否定字符类肯定是正确的选择。

“但它不起作用”。。。当您尝试第二种方法时,到底发生了什么?抱歉,更改了qt,它不适用于双引号行
/define.*[&quote;\']' . $constant . '[&quote;\'][^;]*;/i
/define.*?[&quote\']' . $constant . '[&quote;\'].*?;/i
'/define[^"\']*(["\'])' . $constant . '\1[^;]*;/i'