Регулярное выражение для замены a-тегов в HTML, где атрибут href начинается с http: // - PullRequest
0 голосов
/ 06 октября 2011

Я хочу сопоставить все ссылки в моей HTML-переменной содержимого, где href начинается с http://www.example.com

Пример

должно соответствовать:

<a href="http://www.example.com">foo</a>

не должно совпадать:

<a href="/bar/">bar</a>

также соответствует (с переносами строк и другими HTML-тегами внутри якоря):

<a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
<img src="..." alt="" />
</a>

Я начал примерно так:

<CFSAVECONTENT variable="html">
    <a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
        <img src="..." alt="" /> some Text
    </a>
</CFSAVECONTENT>
<CFSET result = REReplace(html, "<a[^>]*href="http://www\.example\.com[^"]*"[^>]?>([^<]+)</a>", "\1") />

но, конечно, этот пример не будет соответствовать моему последнему примеру ссылки с тегом img внутри тега a ...

Есть намеки на это?

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Предполагая, что:

<CFSAVECONTENT variable="html">
    <a class="bla" id="blubb" href="http://www.example.com/asdf/" title="oops">
        <img src="..." alt="" /> some Text
    </a>
    <a href="http://www.example.com/foo">foo</a>
    <a href="http://www.yahoo.com">abc</a>
    <a href="http://www.example.com/bar">bar</a>
</CFSAVECONTENT>

Использование:

<cfset links = ReMatch('<a[^>]*href="http://www\.example\.com[^"]*"[^>]*>(.+?)</a>', html) />

'links' теперь является массивом совпадающих URL-адресов (якоря 1, 2 и 4 должны быть в массиве).

Имейте в виду, что мой ответ был сформулирован в предположении, что вы хотите сопоставить все якоря, начинающиеся с http://www.example.com, что может не совпадать с тем, что вы задали в названии этого вопроса.

0 голосов
/ 06 октября 2011

Может быть сложно и опасно пытаться использовать регулярные выражения для HTML, как это (особенно если это не ваш HTML, а "дикий" код из Интернета), по целому ряду причин.

Правильный инструмент для этой работы - анализатор HTML , который может предоставить вам DOM для манипуляции.

К сожалению, для CF здесь ничего нет, поэтому вам нужно взглянуть на Java. Я слышал хорошие вещи о Иерихоне , но никогда не использовал его сам.

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