在PhpStorm IDE中,使用搜索和替换功能,我试图将.jpg
添加到$colorsfiles = [
之后和结束]
之前的引号之间的所有字符串中。
$colorsfiles = ["Blue", "Red", "Orange", "Black", "White", "Golden", "Green", "Purple", "Yellow", "cyan", "Gray", "Pink", "Brown", "Sky Blue", "Silver"];
如果"abc"
不在$colorsfiles = [
和]
之间,则不应进行替换。
我正在使用的正则表达式是
$colorsfiles = \[("(\w*?)", )*
,替换字符串为
$colorsfiles = ["$2.jpg"]
当前结果是
$colorsfiles = ["Brown.jpg"]"Sky Blue", "Silver"];
预期输出是
$colorsfiles = ["Blue.jpg", "Red.jpg", "Orange.jpg", "Black.jpg", "White.jpg", "Golden.jpg", "Green.jpg", "Purple.jpg", "Yellow.jpg", "cyan.jpg", "Gray.jpg", "Pink.jpg", "Brown.jpg", "Sky Blue.jpg", "Silver.jpg"];
答案 0 :(得分:1)
为什么要为此使用正则表达式?一个简单的array_map()就能为您解决问题。
<?php
function addExtension($color)
{
return $color.".jpg";
}
$colorsfiles = ["Blue", "Red", "Orange", "Black", "White", "Golden", "Green", "Purple", "Yellow", "cyan", "Gray", "Pink", "Brown", "Sky Blue", "Silver"];
$colorsfiles_with_extension = array_map("addExtension", $colorsfiles);
print_r($colorsfiles_with_extension);
?>
编辑:我已经在我的 PhpStorm 中对其进行了测试,就像这样
搜索:
"([a-zA-Z\s]+)"
全部替换:
"$1.jpg"
答案 1 :(得分:1)
您应该已经说过要在IDE上进行尝试
即使我不使用PHPStorm,也要在NetBeans上发布经过测试的解决方案。
查找:"([\w ]+)"([\,\]]{1})
替换:"$1\.jpg"$2
答案 2 :(得分:0)
您可以使用
(\G(?!^)",\s*"|\$colorsfiles\s*=\s*\[")([^"]+)
,并替换为$1$2.jpg
。参见this regex demo。
正则表达式匹配$colorsfiles = ["
或上一个匹配项的结尾后跟","
,同时将这些文本捕获到组1中(后来称为$1
占位符),然后捕获到组2中(后来用$2
指代)一个或多个双引号以外的字符。
详细信息
(\G(?!^)",\s*"|\$colorsfiles\s*=\s*\[")
-
\G(?!^)",\s*"
-上一个匹配项(\G(?!^)
),",
子字符串,0 +空格(\s*
)和一个"
字符的结尾|
-或\$colorsfiles\s*=\s*\["
-$colorsfiles
,0+空格(\s*
),=
,0+空格,["
(请注意$
和[
必须转义以匹配文字字符)([^"]+)
-捕获组2:除+
(否定的字符类,"
)以外的一个或多个([^"]
)字符