正则表达式:括号内的数据(mysqli> pdo)

时间:2017-04-19 13:28:48

标签: regex

要将系统迁移到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)?所以,(和)的数量应该相等。

2 个答案:

答案 0 :(得分:2)

您需要一个具有PCRE兼容正则表达式的编辑器(Dreamweaver可能只支持JavaScript样式的正则表达式);那么你可以使用这样的递归正则表达式:

mysqli_query\(\$db, ((?:[^()]++|\((?1)\))*)\)

测试live on regex101.com

<强>解释

(          # 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查询本身内的某些符号(例如,如果它遇到\'))。

https://regex101.com/r/1NRYUw/1