正则表达式匹配php代码中的第一个分号
我有一个正则表达式,用于使用正则表达式匹配php代码中的第一个分号,php,regex,Php,Regex,我有一个正则表达式,用于使用preg_match在php文件中重新定义一个常量,并使用htmlspecialchars筛选输入文件 例如 以下正则表达式有效 /define.*["e\']' . $constant . '["e;\'].*;/i 但是,它与最后一个分号匹配,在大多数情况下有效,但在以下情况下失败 例如: 请注意最后一个分号,它会将代码替换为 define("MEMBERSHIP", 'SILVER'); empty means not in u
preg_match
在php文件中重新定义一个常量,并使用htmlspecialchars筛选输入文件
例如
以下正则表达式有效
/define.*["e\']' . $constant . '["e;\'].*;/i
但是,它与最后一个分号匹配,在大多数情况下有效,但在以下情况下失败
例如:
请注意最后一个分号,它会将代码替换为
define("MEMBERSHIP", 'SILVER'); empty means not in use.
这打破了密码。尝试了下面的正则表达式,但对那些使用双引号的人无效
/define.*["e;\']' . $constant . '["e;\'][^;]*;/i
知道如何解决这个问题吗?如果在
*
之后添加?
,它将变得贪婪,并占用尽可能少的字符数。所以试试看
/define.*?["e\']' . $constant . '["e;\'].*?;/i
看看它是否符合你的要求
一般来说,如果您实际上不是指任何字符,则应避免使用
s。您可以使用以下命令匹配相应的引号:
否则,最后的否定字符类肯定是正确的选择。“但它不起作用”。。。当您尝试第二种方法时,到底发生了什么?抱歉,更改了qt,它不适用于双引号行
/define.*["e;\']' . $constant . '["e;\'][^;]*;/i
/define.*?["e\']' . $constant . '["e;\'].*?;/i
'/define[^"\']*(["\'])' . $constant . '\1[^;]*;/i'