2009-08-31 4 views
0

Мне нужно обработать содержимое HTML и заменить значение IMG SRC на фактические данные. Для этого я выбрал Регулярные выражения.Синтаксис Regex - Справка

В первую мою попытку мне нужно найти теги IMG. Для этого я использую следующее выражение:

<img.*src.*=\s*".*" 

Затем в теге IMG Ищу SRC = «...» и заменить его новым значением SRC. Я использую следующее выражение для получения SRC:

выпусков
src\s*=\s*".*"\s* 

Второго выражения, имеющие:

Для следующего текста он работает:

<img alt="3D&quot;&quot;" hspace= 
    "3D0" src="3D&quot;cid:TDCJXACLPNZD.hills.jpg&quot;" align= 
    "3dbaseline" border="3d0" /> 

Но для следующих за ним не:

<img alt="3D&quot;&quot;" hspace="3D0" src= 
    "3D&quot;cid:UHYNUEWHVTSH.lilies.jpg&quot;" align="3dbaseline" 
    border="3d0" /> 

Что происходит, это выражение возвращает

src="3D&quot;cid:TDCJXACLPNZD.hills.jpg&quot;" align= 
    "3dbaseline" 

Он не возвращает только часть src, как ожидалось.

Я использую библиотеку регулярных выражений C++ Boost.

Пожалуйста, помогите мне разобраться в проблеме.

Thanks, Hilmi.

+1

Какой позор вы выбрали регулярные выражения, которые хрупки и * не могут * анализировать HTML общего назначения. Использование надлежащего анализатора HTML сделает его намного более надежным. (Но какова сделка с 3D и квотами? Похоже, что комбинация неподходящих кавычек и кодирования HTML исказила эту разметку, прежде чем вы даже начали ее прочитывать.) – bobince

ответ

0

Ваше первое регулярное выражение не работает с вашим образцом текста для меня. Я обычно использую это вместо того, при поиске конкретных HTML теги:

<img[^>]*> 

Кроме того, попробуйте это для второго выражения:

src\s*=\s*"[^"]*"\s* 

ли это помощь?

+0

Большое спасибо за это. :) –

2

Проблема в том, что .* является «жадным» совпадением - он будет захватывать столько текста, сколько возможно, но при этом позволяя регулярному выражению соответствовать. То, что вы, вероятно, хотите что-то вроде этого:

src\s*=\s*"[^"]*"\s* 

, который будет соответствовать только без двойных кавычек символов внутри строки Src, и, таким образом, не пройти мимо заканчивающихся двойных кавычек.

+0

Большое спасибо за это. :) –

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