[英]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.