Добавить слово в конце URL - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь добавить слово в конец всех URL-адресов в строке (много URL-адресов)

Пример

$wordToAdd = "/Sunday"

$StringBefore = "hello word1 href=""https://youtube.ca/aaa"" hello word2 href=""https://google.com/aaa"" "

$StringAfter = "hello word1 href=""https://youtube.ca/aaa/Sunday"" hello word2 href=""https://google.com/aaa/Sunday"""

Помогите, пожалуйста!

1 Ответ

1 голос
/ 20 октября 2019

Следующее решение будет работать на PowerShell (v3 или выше) или PowerShell Core.

$wordToAdd = "/Sunday"
$StringBefore = "hello word1 href=""https://youtube.ca/aaa"" hello word2 href=""https://google.com/aaa"" "

$StringBefore -replace '(?<=href="+)(?<uri>[^"]+)',"`${uri}$wordToAdd"

Объяснение:

-replace использует сопоставление регулярных выражений, за которым следуетзамена группы захвата строк и регулярных выражений. Ниже приведена разбивка соответствия регулярному выражению:

  • (?<=href="+): используется положительное утверждение за утверждением (?<=) для буквенной строки href= и " один или несколько раз (+).
  • (?<uri>[^"]+): использует именованную группу перехвата (?<uri>) для сопоставления с не двойными кавычками [^"] один или несколько раз.
  • ${uri}: синтаксис, необходимый для доступа к группе перехвата uri,Обратите внимание на обратную черту, поскольку она не является переменной , поэтому мы хотим, чтобы PowerShell не интерполировал. Это значение должно быть внутри одинарных или двойных кавычек с экранированным символом $.

В PowerShell v6 или более поздней версии вы можете использовать замену блока сценариев.

$StringBefore -replace '(?<=href="+)[^"]+',{$_.ToString() + $wordToAdd}

Здесь $_ является Match объектом. Метод ToString() возвращает совпадение в виде строки, поэтому мы можем легко присоединить к ней другую строку ($wordToAdd).


Если все ваши URI в строке всегда имеют один и тот же протокол, выможет сделать вашу строку регулярных выражений проще.

$StringBefore -replace 'https://[^"]+',"`$&$wordToAdd"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...