要将系统迁移到PDO,我们希望替换一些查询。通过正则表达式,我们可以改进进度。我们正在寻找一种方法来匹配:
mysqli_query($db, [expression follows here])
所以,我们使用了以下正则表达式:
mysqli_query\(\$db, (.*?)\)
问题是当我们有一个带有opening和closing()参数的连接查询时,我们遇到了问题。
示例:mysqli_query($db, "SELECT users.id FROM users JOIN (... ) on .. WHERE users.id=1")
是否可以编辑正则表达式,以便在打开时允许a)?所以,(和)的数量应该相等。
答案 0 :(得分:2)
您需要一个具有PCRE兼容正则表达式的编辑器(Dreamweaver可能只支持JavaScript样式的正则表达式);那么你可以使用这样的递归正则表达式:
mysqli_query\(\$db, ((?:[^()]++|\((?1)\))*)\)
<强>解释强>
( # Match and capture in group 1:
(?: # Start of non-capturing group that either matches
[^()]++ # a sequence of characters except parentheses
| # or
\( # an opening parenthesis
(?1) # followed by an expression that follows the same rules as group 1
\) # and a closing parenthesis.
)* # Do this any number of times (including 0)
) # End of group 1
答案 1 :(得分:0)
请尝试以下操作:mysqli_query\(\$db, ('|")(.+?)\1\)[\s;]
。这假设表达式将在单引号或双引号之间。这可能会失败,具体取决于它之后的内容,以及SQL查询本身内的某些符号(例如,如果它遇到\')
)。