Regex UTM Google - PullRequest
       9

Regex UTM Google

0 голосов
/ 27 июня 2018

Я пытаюсь извлечь UTM из ссылки Google, используя , но мое регулярное выражение не работает должным образом.

Вот пример ссылки Google:

xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco

Я попробовал следующее регулярное выражение, чтобы извлечь TOTO:

.+&utm_campaign=([[a-z]]+)&.+

безуспешно.

Если кто-то может помочь, спасибо!

Ответы [ 4 ]

0 голосов
/ 27 июня 2018

Вот строка регулярного выражения, которая будет соответствовать значению параметра utm_campaign, независимо от его положения в строке запроса.

(?<TOTO>(?<=utm_campaign=).*?(?=&|$))

Пояснение:

  • ?<TOTO> записывает результат в ключ TOTO после выполнения регулярного выражения

  • (?<=utm_campaign=) - это запрос, который гарантирует, что значению предшествует utm_campaign=

    • .*? найдет значение параметра (т.е. TOTO). Причиной ? является ленивая оценка - он будет искать только до следующего правила (см. Пункт ниже)

    • (?=&|$) - это предварительный просмотр, который будет соответствовать либо &, либо концу строки (в случае, если utm_campaign - последний параметр)

0 голосов
/ 27 июня 2018

Вы ищете [[a-z]]+, однако TOTO в верхнем регистре, поэтому не между 'a' и 'z'. Вы можете обновить его до [[A-Za-z]]+, чтобы оно соответствовало буквам любого регистра.

РЕДАКТИРОВАТЬ: [[A-Za-z]]+ будет соответствовать любой букве регистра, но также будет соответствовать любым символам '[' или ']'. Если вы не хотите сопоставлять их, вы можете изменить его на [A-Za-z]+, чтобы он совпадал только с любыми регистрационными буквами

0 голосов
/ 27 июня 2018

В вашем шаблоне [[a-z]]+ является искаженным выражением в скобках, поскольку оно соответствует любому символу из выражения [[a-z] в скобках (любая строчная буква ASCII или [), а затем соответствует одному или нескольким ] символам. Вы хотели использовать одиночные [ и ] здесь.

Вы можете использовать sub со следующим регулярным выражением:

sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)

См. Демоверсию regex .

Детали

  • .* - любые 0+ символов, как можно больше
  • [&?] - ? или &
  • utm_campaign= - буквальная подстрока
  • ([^&]+) - Группа захвата 1: один или несколько символов, отличных от & символов
  • .* - любые 0+ символов, как можно больше

\1 - это обратная обратная ссылка, которая помещает содержимое группы 1 в результат.

См. Демоверсию R :

s <- "xxx/yyy?utm_medium=display&utm_source=ogury&utm_campaign=TOTO&zzz=coco"
sub(".*[&?]utm_campaign=([^&]+).*", "\\1", s)
## => [1] "TOTO"
0 голосов
/ 27 июня 2018

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

(?:&utm_campaign=)(\w+)

и используйте первую группу захвачено

Попробуйте онлайн

...