Я пытаюсь извлечь значение из этой строки с помощью регулярного выражения, но, похоже, у меня не получается.
нить:
?Ntt=crockett%20&%20Jones&Rdm=718&searchType=simple&type=search&Ns=&N=&Nrpp=12&No=0&Nr=AND(product.active:1,NOT(record.type:Store))
Мне нужно значение Ntt
, которое равно crockett%20&%20Jones
.
В настоящее время у меня есть регулярное выражение:
\?Ntt=(([&%])|([^&=]))*
но это приводит к:
?Ntt=crockett%20&%20Jones&Rdm
Как я могу обновить свое регулярное выражение, чтобы получить нужное мне значение?
@mankowitz, мне нужно &%20Jones
- вот почему я изо всех сил пытаюсь найти подходящее регулярное выражение
Откуда вы знаете, что вторая группа является частью того, что вы пытаетесь зафиксировать? Другими словами, как узнать, сколько вам нужно?
Вы можете использовать регулярное выражение на основе группы захвата, например
[&?]Ntt=((?:%20&%20|[^&])*)
Посмотрите демонстрацию регулярного выражения .
В качестве альтернативы вы можете использовать регулярное выражение на основе просмотра назад, например
(?<=[&?]Ntt=)(?:%20&%20|[^&])*
Посмотрите демонстрацию регулярного выражения .
Подробности
(?<=[&?]Ntt=)
— положительный ретроспективный анализ, который соответствует местоположению, которому непосредственно предшествует ?
или &
, а затем Ntt=
(?:%20&%20|[^&])*
— группа без захвата, которая соответствует нулю или более вхождений подстроки %20&%20
или любого символа, кроме &
.[&\?]Ntt=([^&]*)
Сначала захватите разделитель (либо ?, либо &), затем зафиксируйте ключ, а затем зафиксируйте все до следующего разделителя.
& обычно разделяет входные данные в строке запроса. Вы уверены, что вам нужен
&%20Jones
? ЕСЛИ нет, используйте[&\?]Ntt=([^&]*)