簡體   English   中英

Notepad ++正則表達式問題

[英]Notepad++ Regular Expression problems

我試圖從粘貼插入語句中刪除一些工作,並為mysqli准備的語句格式化它們。

這是一個例子:

INSERT INTO 
products
(hash, name, description, large_img, small_img, label_img, category, small, large, small_price, large_price, best_seller, in_stock) 
VALUES 
([value-1],[value-2],[value-3],[value-4],[value-5],[value-6],[value-7],[value-8],[value-9],[value-10],[value-11],[value-12],[value-13])

所以我嘗試了一個正則表達式:

find: (\[.*)(])


replace: ?

但不是替換每個[value=*] ,而是替換所有它們,只在最后一個括號中停止。 為什么?

輸出:

INSERT INTO 
products
(id, hash, name, description, large_img, small_img, label_img, category, small, large, small_price, large_price, best_seller, in_stock) 
VALUES 
(?)

我如何才能將其更換正確。 我的正則表達式不應該選擇直到第一個右括號的所有內容,但是為什么它選擇直到最后一個右括號的所有內容?

*是一個貪婪的運算符,表示它將盡可能匹配,並且仍然允許正則表達式的其余部分匹配。 使用*? 對於非貪婪匹配,意味着“零或更多-最好盡可能少”。

(\[.*?)(])

注意 :實際上,無需使用捕獲組,因為您不在替換呼叫中引用它們。

Find: \[.*?\]
Replace: ?

不要忘記*是貪婪的,它會嘗試盡可能匹配,請使用非貪婪版本:

(\[.*?)(])

正如其他人所說, *是貪婪的,而*? 是非貪婪的,並且只會獲取要匹配的最低金額(這就是您要嘗試執行的操作。)


但是,與其為PHP放置一串問號和逗號,不如讓它變得懶惰並讓PHP自己生成它們: implode(',', array_fill(0, 13, '?'))

不管您需要多少喂食來代替那13而且您還有一組可靠的占位符,而較少受制於錯視錯別字。

例:

$placeholders = implode(',', array_fill(0, 13, '?'));

$sql = <<<SQL
INSERT INTO
products
(id, hash, name, description, large_img, small_img, label_img, category, small, large, small_price, large_price, best_seller, in_stock)
VALUES
($placeholders)
SQL;

echo $sql

INSERT INTO
products
(id, hash, name, description, large_img, small_img, label_img, category, small, large, small_price, large_price, best_seller, in_stock)
VALUES
(?,?,?,?,?,?,?,?,?,?,?,?,?)

暫無
暫無

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

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