PhpStorm поиск и замена несколько раз между двумя строками - PullRequest
0 голосов
/ 07 ноября 2018

В IDE PhpStorm, используя функцию поиска и замены, я пытаюсь добавить .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 голосов
/ 07 ноября 2018

Вы должны были сказать, что пытаетесь сделать это на IDE

Несмотря на то, что я не использую PHPStorm, я публикую проверенное решение на моем NetBeans.

Найти: "([\w ]+)"([\,\]]{1})
Заменить: "$1\.jpg"$2

0 голосов
/ 07 ноября 2018

Вы можете использовать

(\G(?!^)",\s*"|\$colorsfiles\s*=\s*\[")([^"]+)

и заменить на $1$2.jpg. Смотрите это регулярное выражение демо .

Регулярное выражение соответствует $colorsfiles = [" или концу предыдущего совпадения, за которым следует "," при захвате этих текстов в Группу 1 (позже упоминается как $1 заполнитель), а затем фиксируется в Группе 2 (позже упоминается как $2) один или несколько символов, отличных от двойных кавычек.

Детали

  • (\G(?!^)",\s*"|\$colorsfiles\s*=\s*\[") -
    • \G(?!^)",\s*" - конец предыдущего совпадения (\G(?!^)), ", подстрока, 0+ пробелов (\s*) и " char
    • | - или
    • \$colorsfiles\s*=\s*\[" - $colorsfiles, 0+ пробелов (\s*), =, 0+ пробелов, [" (обратите внимание, что $ и [ должны быть экранированы, чтобы соответствовать буквенным символам)
  • ([^"]+) - Группа захвата 2: один или несколько (+) символов, отличных от " (класс отрицательных символов, [^"])
0 голосов
/ 07 ноября 2018

зачем вам для этого нужно регулярное выражение? простой 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]+)"

replace_all :

"$1.jpg"

enter image description here

...