PhpStorm搜索并替换两个字符串之间的多次

时间:2018-11-07 06:02:58

标签: regex replace phpstorm

在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"];    

3 个答案:

答案 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"

enter image description here

答案 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:除+(否定的字符类,")以外的一个或多个([^"])字符