Как сделать регулярное выражение уникальным для нескольких значений - PullRequest
0 голосов
/ 28 августа 2018

Мой ответ, имеющий те же значения в 2 местах, как

http://images.123456_120*75
http://images.123456_120*75
http://images.784217_120*75
http://images.784217_120*75

В этом мне нужно захватить 123456 и 784217 только один раз.

Я использовал регулярное выражение в качестве http://images.(.+?)_120*75, которое извлекает все 4 значения. Но меня беспокоит, что мне нужно одно значение среди 2 для каждого. Можете ли вы помочь мне, пожалуйста, заранее спасибо?

Ответы [ 4 ]

0 голосов
/ 30 августа 2018

Возможно, вы могли бы захватить весь матч в группе и захватить цифры во второй группе. Затем используйте отрицательный взгляд, чтобы утверждать, что то, что захвачено в группе 1, больше не происходит, давая вам уникальные значения.

Цифры, которые вы хотите сопоставить, находятся в группе захвата 2. Обратите внимание, что для совпадения с точкой . и звездочкой * буквально вы должны их избежать.

(http://images\.(\d+)_120\*75)(?![\s\S]*\1)

Regex demo

0 голосов
/ 28 августа 2018

Делать это с помощью регулярных выражений довольно сложно, я бы рекомендовал вместо этого использовать JSR223 PostProcessor и Groovy .

  1. Добавить JSR223 PostProcessor как дочерний элемент запроса, который возвращает вышеуказанные URL-адреса изображений
  2. Поместите следующий код в область «Сценарий»

    (prev.getResponseDataAsString() =~ "http://images.(\\d+)_120\\*75").findAll().unique().eachWithIndex {match, idx ->
        vars.put('image_' + idx,match.get(1))
    }
    
  3. Если все идет хорошо, вы должны увидеть следующие сгенерированные переменные JMeter :

    image_0=123456
    image_1=784217
    etc.
    
0 голосов
/ 28 августа 2018

Это должно сработать, оно захватывает уникальные значения только один раз:

(\d+)(?:_)(?![\s\S]*\1)

Попробуйте демо здесь

Объяснение

(\d+)(?:_)(?![\s\S]*\1)

1-я группа захвата (\d+)

\d+ соответствует цифре (равно [0-9])

  • Квантификатор - сопоставляет от одного до неограниченного количества раз, насколько это возможно, и возвращает по мере необходимости (жадный)

Группа без захвата (?:_)

_ соответствует символу _ буквально (с учетом регистра)

Отрицательный взгляд вперед (?![\s\S]*\1)

Утверждают, что приведенное ниже регулярное выражение не соответствует Соответствует одному символу, представленному в списке ниже [\s\S]*

  • Квантификатор - сопоставляет от нуля до неограниченного числа раз столько раз, сколько возможно, возвращая при необходимости (жадный)

\s соответствует любому пробелу (равен [\r\n\t\f\v ])

\S соответствует любому непробельному символу (равному [^\r\n\t\f\v ])

\1 соответствует тому же тексту, что и последний сопоставленный первой группе захвата

0 голосов
/ 28 августа 2018

Одним из способов является 2 постпроцессора с тем же регулярным выражением. Теперь в обычном экстракторе 1st используется Match No: в качестве значения 1 , а в 2nd используется Match No: значение как 4 .

enter image description here

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...