Синтаксис регулярных выражений - Справка - PullRequest
0 голосов
/ 01 сентября 2009

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

В моей первой попытке мне нужно найти теги 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.

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

Спасибо, Хильми.

Ответы [ 2 ]

2 голосов
/ 01 сентября 2009

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

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

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

0 голосов
/ 01 сентября 2009

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

<img[^>]*>

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

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

Это помогает?

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