簡體   English   中英

在以“mySqlQueryToArray”開頭的行的末尾找到單引號

[英]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字符串
打開搜索面板:⌘FFind->Find...
確保選擇了正則表達式( .* )按鈕(左下角)和換行選擇器(所有其他應該關閉)搜索: ^\\s*mySqlQueryToArray.*$

  • ^行的開頭
  • \\s*任何縮進
  • mySqlQueryToArray你的電話
  • .*無論背后是什么
  • $ end of line

單擊“ Find All
這將選擇您要修改的所有內容。

2 /進入替換模式
⌥⌘FFind->Replace...
這一次,確保wrap,Regex和In選擇處於活動狀態
他們搜索'([^']*)'並替換為"\\1"

  • '是你的單引號
  • (...) si是在替換字段中由\\1引用的捕獲塊
  • [^']*適用於任何不是單引號的字符,重復

然后點擊Replace All

我知道這個問題比另一個答案稍微復雜一點,但是這個問題解決了你的行包含幾個單引號字符串的情況。 像這樣:

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

如果這太多了,我猜想會發現: (?<=mySqlQueryToArray)(.*?)'([^']*)'(.*?)並將其替換為\\1"\\2"\\3將足夠。

你可以使用這樣的正則表達式:

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

工作演示

檢查替換部分。

你可以使用\\K ,看看這個正則表達式:

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

這是一個正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM