![](/img/trans.png)
[英]Regex to parse a single line starting with “My Password: ” to the end of the line
[英]find a single quote at the end of a line starting with “mySqlQueryToArray”
我正在嘗試使用正則表達式來查找單引號(因此我可以將它們全部轉換為雙引號)在以mySqlQueryToArray(一個對SQL DB進行查詢的函數)開頭的行中的任何位置。 我正在使用Sublime Text 3進行正則表達式,我非常確定使用Perl Regex。 我希望我的正則表達式與一行中的每個單引號匹配,例如我可能有這樣的行:
mySqlQueryToArray($con, "SELECT * FROM Template WHERE Name='$name'");
我希望正則表達式在該行中匹配$name
周圍的兩個引號,但該行中沒有其他字符。 我一直在嘗試使用(?<=mySqlQueryToArray.*)'
但它告訴我斷言背后的外觀是無效的。 我也試過(?<=mySqlQueryToArray)(?<=.*)'
但這也是無效的。 有人可以引導我到一個能完成我需要的正則表達式嗎?
要在以關鍵字開頭的行中查找任意數量的單引號,您可以使用\\G
錨點(“最后一場比賽結束”)替換:
(^\h*mySqlQueryToArray|(?!^)\G)([^\n\r']*)'
使用\\1\\2<replacement>
: 在此處查看演示 。
說明
( ^\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>
替換它, 但只有當這一切都是:
^mySqlQueryToArray
)之后,或者 (?!^)\\G
):在這種情況下,我們知道我們有關鍵字並且在相關的行上。 \\h*
解釋任何已開始的縮進,如Xælias所建議的那樣( \\h
是任何類型的水平空格的快捷方式)。
https://stackoverflow.com/a/25331428/3933728是一個更好的答案。
我對RegEx和ST不夠好,只需一步即可完成。 但我可以用兩個來做:
1 /搜索所有mySqlQueryToArray
字符串
打開搜索面板:⌘F或Find->Find...
確保選擇了正則表達式( .*
)按鈕(左下角)和換行選擇器(所有其他應該關閉)搜索: ^\\s*mySqlQueryToArray.*$
^
行的開頭 \\s*
任何縮進 mySqlQueryToArray
你的電話 .*
無論背后是什么 $
end of line 單擊“ Find All
這將選擇您要修改的所有內容。
2 /進入替換模式
⌥⌘F或Find->Replace...
這一次,確保wrap,Regex和In選擇處於活動狀態 。
他們搜索'([^']*)'
並替換為"\\1"
。
'
是你的單引號 (...)
si是在替換字段中由\\1
引用的捕獲塊 [^']*
適用於任何不是單引號的字符,重復 然后點擊Replace All
我知道這個問題比另一個答案稍微復雜一點,但是這個問題解決了你的行包含幾個單引號字符串的情況。 像這樣:
mySqlQueryToArray($con, "SELECT * FROM Template WHERE Name='$name' and Value='1234'");
如果這太多了,我猜想會發現: (?<=mySqlQueryToArray)(.*?)'([^']*)'(.*?)
並將其替換為\\1"\\2"\\3
將足夠。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.