我正在尝试使用正则表达式在以mySqlQueryToArray(对SQL DB进行查询的函数)开头的行中的任何地方查找单引号(以便将其全部转换为双引号)。我正在Sublime Text 3中做正则表达式,我敢肯定使用Perl Regex。我想让我的正则表达式与一行中的每个单引号匹配,例如,我可能有一行:

mySqlQueryToArray($con, "SELECT * FROM Template WHERE Name='$name'");

我希望正则表达式在该行中匹配$name的两个引号,但该行中没有其他字符。我一直在尝试使用(?<=mySqlQueryToArray.*)',但它告诉我断言的外观无效。我也尝试过(?<=mySqlQueryToArray)(?<=.*)',但这也是无效的。有人可以指导我使用正则表达式来满足我的需要吗?

最佳答案

https://stackoverflow.com/a/25331428/3933728是一个更好的答案。

我对RegEx和ST不够好,无法一步一步地做到这一点。但我可以做到以下两点:

1 /搜索所有mySqlQueryToArray字符串
打开搜索面板:⌘F或Find->Find...确保已选择正则表达式(.*)按钮(左下方)和换行选择器(所有其他选项都应关闭)
搜索:^\s*mySqlQueryToArray.*$

  • ^
  • 的开头
  • \s*任何缩进
  • mySqlQueryToArray您的 call
  • .*背后
  • $行尾

  • 点击Find All这将选择每次要修改的内容。

    2 /进入替换模式
    ⌥⌘F或Find->Replace...这次,请确保包装,正则表达式和选择处于 Activity 状态。
    他们搜索'([^']*)'并替换为"\1"
  • '是您的单引号
  • (...)是捕获块,由替换字段
  • 中的\1引用
  • [^']*适用于不是单引号的任何字符,重复

  • 然后点击Replace All
    我知道这比另一个答案要复杂一点,但是这解决了您的行包含多个单引号字符串的情况。像这样:
    mySqlQueryToArray($con, "SELECT * FROM Template WHERE Name='$name' and Value='1234'");
    

    如果这太多了,我猜像是find:(?<=mySqlQueryToArray)(.*?)'([^']*)'(.*?)并将其替换为\1"\2"\3就足够了。

    关于regex - 在以“mySqlQueryToArray”开头的行末查找单引号,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25329624/

    10-10 18:57