我试图使用正则表达式来查找单引号(所以我可以将它们全部变成双引号)在以mySqlQueryToArray(一个向SQL DB查询的函数)开头的行中的任何位置。我正在使用Sublime Text 3进行正则表达式,我非常确定使用Perl Regex。我希望我的正则表达式匹配一行中的每个单引号,例如我可能有这一行:
mySqlQueryToArray($con, "SELECT * FROM Template WHERE Name='$name'");
我希望正则表达式在该行中匹配$name
周围的两个引号但该行中没有其他字符。我一直试图使用(?<=mySqlQueryToArray.*)'
,但它告诉我断言背后的外观是无效的。我也试过(?<=mySqlQueryToArray)(?<=.*)'
,但这也无效。有人可以引导我到一个能完成我需要的正则表达式吗?
答案 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
字符串
打开搜索面板:⌘F或Find->Find...
确保选择了正则表达式(.*
)按钮(左下角)和换行选择器(所有其他按钮应关闭)
搜索:^\s*mySqlQueryToArray.*$
^
行首\s*
任何缩进mySqlQueryToArray
您的来电.*
无论背后是什么$
行尾点击Find All
这将选择您想要修改的内容。
2 /进入替换模式
⌥⌘F或Find->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)
答案 3 :(得分:0)