2014-02-15 1 views
0

Я новичок в HTTP и Regex. У меня есть часть кода, которую я поместил в Delphi, которая работает частично. Исключение «не с просмотром назад фиксированной длиной» поднимаются на конкретный операторе:Портирование с C# на Delphi, несовместимость Regex

'(?<=image\\?c=)[^\"]+' 

заявления есть, чтобы извлечь ссылку на изображение из HTML формы. После некоторых исследований здесь и в Интернете я понял, что «+» в конце вызывает это в некоторых реализациях Regex. Который я не мог найти, как я могу изменить его для работы в реализации Delphi. Как код работает на C#, может кто-нибудь помочь и объяснить?

+2

Почему вы не используете парсер html? –

+0

@DavidHeffernan есть ли у вас предложения? Раньше я ничего не слышал. Его третий день с html. –

+2

http://stackoverflow.com/questions/2733972/best-lightweight-html-parser-for-delphi –

ответ

4

Секция lookbehind не имеет фиксированной длины. Это не имеет никакого отношения к + в конце. Сторона lookbehind - (?<=image\\?c=). Вы скопировали это с C#. В C# регулярное выражение хочет искать буквенный знак вопроса. Это специальный символ в регулярном выражении, поэтому перед ним нужна обратная косая черта. Однако обратная косая черта является особенной в строках C#, так что обратная косая черта требует еще одной обратной косой черты, все просто представляют собой один знак вопроса.

В строках Delphi обратные косые черты не являются особыми, поэтому два из них рассматриваются как буквальная обратная косая черта для поиска в регулярном выражении. Вопросительный знак не экранируется, поэтому регулярное выражение Delphi рассматривает его как инструкцию, чтобы сделать буквальную обратную косую черту необязательной. Необязательный символ делает переменную длину lookbehind.

Чтобы решить эту проблему, просто удалите одну обратную косую черту.

Вы также можете удалить его перед кавычкой, но он не должен иметь никакого эффекта, поскольку кавычки не являются специальными в регулярном выражении.

Даже если вы используете HTML-парсер для идентификации элемента HTML, содержащего этот фрагмент URL-адреса, вам может понадобиться правильное регулярное выражение для распознавания того, какой элемент HTML является вашей целью.

 Смежные вопросы

  • Нет связанных вопросов^_^