Перейти к содержимому

Фотография

FIXED|Подскажите по регулярному выражению


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 EugeneL

EugeneL

    Активный участник

  • Members
  • PipPip
  • 101 сообщений

Отправлено 07 декабря 2011 - 09:57

[QTP 10]

Есть строка:

"<STRONG><A href="shopreviews/821/mobile/"><IMG title=MOBIART border=0 alt=MOBIART src="http://content1.onli..."></A></STRONG>
<DIV style="MARGIN-TOP: 15px">8 <B>(029)</B> 609 02 30<BR>8 <B>(029)</B> 531 02 30<BR>8 <B>(029)</B> 609 02 30<BR>8 <B>(029)</B> 531 02 30<BR></DIV>"

Хочу вытащить из нее гиперссылку с помощью регулярного выражения. Паттерн составил примерно вот такой: (?<=href\=")[^]+?(?=")

Попробовал реализовать в коде:

Set oRegExp = New RegExp
oRegExp.IgnoreCase = true
'oRegExp.Pattern = "(?<=href\=\"")[^]+?(?=\"")"
Set oMatches = oRegExp.Execute(strShopURL)
Получил ошибку: "Syntax erroe in Regular Expression".

Подскажите, а какие есть нюансы использования регулярных выражений в QTP
  • 0

#2 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 07 декабря 2011 - 10:57

Есть строка:
"<STRONG><A href="shopreviews/821/mobile/"><IMG title=MOBIART border=0 alt=MOBIART src="http://content1.onli..."></A></STRONG>
<DIV style="MARGIN-TOP: 15px">8 <B>(029)</B> 609 02 30<BR>8 <B>(029)</B> 531 02 30<BR>8 <B>(029)</B> 609 02 30<BR>8 <B>(029)</B> 531 02 30<BR></DIV>"

Хочу вытащить из нее гиперссылку с помощью регулярного выражения. Паттерн составил примерно вот такой: (?<=href\=")[^]+?(?=")
Получил ошибку: "Syntax erroe in Regular Expression".

Подскажите, а какие есть нюансы использования регулярных выражений в QTP

Нюанс только один - поддерживаются регулярки, с которыми умеет работать VBScript, весьма слабые. Тем нет несохраняющих скобок, опережающих/ретроспективных проверок, подстановки значений при компиляции, но основной базис есть, его почти всегда хватает.
Попробуйте так:
oRegExp.Pattern = "href=" & chr(34) & "?([^">]+)" & chr(34) & "?>"

  • 1

#3 EugeneL

EugeneL

    Активный участник

  • Members
  • PipPip
  • 101 сообщений

Отправлено 07 декабря 2011 - 11:13

Спасибо, вот такая строка дала достаточно хороший результат:
oRegExp.Pattern = "href=" & chr(34) & "?([^" & chr(34) & ">]+)"
А ошибка была вызвана символами кавычек, как я понимаю? Вы их заменили вызовом через ascii-код.
И убрали "?<=" перед href
  • 0

#4 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 07 декабря 2011 - 11:18

Спасибо, вот такая строка дала нужный результат:

oRegExp.Pattern = "href=" & chr(34) & "?([^" & chr(34) & ">]+)"
А ошибка была вызвана символами кавычек, как я понимаю? Вы их заменили вызовом через ascii-код.

Я заменил кавычки на chr(34) просто потому что не люблю скопление кавычек подряд и постоянно путаю, сколько там кавычек надо написать, чтобы корректно заэкранировать кавычку внутри строки :)
А ошибок в первом варианте много, в частности, анализатор скорее всего не понимает такие конструкции:
(?
[^]
+? (нежадных квантификаторов в VBS тоже нет)
\= - ибо знак равенства не надо экранировать
  • 0

#5 EugeneL

EugeneL

    Активный участник

  • Members
  • PipPip
  • 101 сообщений

Отправлено 07 декабря 2011 - 11:43

А где можно подсмотреть, или как можно узнать, что позволяют регулярные выражения в QTP? Я как его составлял: открыл в калькуляторе "Регулярных выражений" и там составлял. Об ограничениях vbscript я понятия не имел
  • 0

#6 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 07 декабря 2011 - 12:54

А где можно подсмотреть, или как можно узнать, что позволяют регулярные выражения в QTP? Я как его составлял: открыл в калькуляторе "Регулярных выражений" и там составлял. Об ограничениях vbscript я понятия не имел

В справке по VBs.
Там же есть встроенный объект RegExp с несколькими методами. Там и описывается все, что они могут
  • 0


Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных