繁体   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