在以“mySqlQueryToArray”开头的行的末尾找到单引号

时间:2014-08-15 15:46:59

标签: regex perl sublimetext3

我试图使用正则表达式来查找单引号(所以我可以将它们全部变成双引号)在以mySqlQueryToArray(一个向SQL DB查询的函数)开头的行中的任何位置。我正在使用Sublime Text 3进行正则表达式,我非常确定使用Perl Regex。我希望我的正则表达式匹配一行中的每个单引号,例如我可能有这一行:

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

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

4 个答案:

答案 0 :(得分:2)

要在以关键字开头的行中查找任意数量的单引号,您可以使用\G锚点(“最后一场比赛结束”)替换:

(^\h*mySqlQueryToArray|(?!^)\G)([^\n\r']*)'

使用\1\2<replacement>:请参阅demo here

<强>解释

( ^\h*mySqlQueryToArray  # beginning of line: check the keyword is here
 | (?!^)\G )             # if not at the BOL, check we did match sth on this line
( [^\n\r']* ) '          # capture everything until the next single quote

一般的想法是将所有内容与([^\n\r']*)'的下一个单引号匹配,以便将其替换为\2<replacement>仅在以下情况下执行此操作:< / p>

  • 在开始关键字(^mySqlQueryToArray)或
  • 之后
  • 在最后一场比赛结束后((?!^)\G):在这种情况下,我们知道我们有关键字,并且在相关的一行。

\h*说明任何已开始的缩进,如Xælias所建议的那样(\h是任何类型的水平空格的快捷方式)。

答案 1 :(得分:1)

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

我对RegEx和ST不够好,只需一步即可完成。但我可以用两个来做:

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

  • ^行首
  • \s*任何缩进
  • mySqlQueryToArray您的来电
  • .*无论背后是什么
  • $行尾

点击Find All
这将选择您想要修改的内容。

2 /进入替换模式
⌥⌘FFind->Replace...
这一次,确保wrap,Regex和In选择处于活动状态 他们搜索'([^']*)'并替换为"\1"

  • '是您的单引号
  • (...)是捕获块,由替换字段中的\1引用
  • [^']*适用于任何不是单引号的字符,重复

然后点击Replace All

我知道这个问题比另一个答案稍微复杂一点,但是这个问题解决了你的行包含几个单引号字符串的情况。像这样:

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

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

答案 2 :(得分:0)

你可以使用这样的正则表达式:

(mySqlQueryToArray.*?)'(.*?)'(.*)

<强> Working demo

检查替换部分。

答案 3 :(得分:0)

您可以使用\K,请参阅此正则表达式:

mySqlQueryToArray[^']*\K'(.*?)'

这是regex demo