Регулярное выражение, которое находит гиперссылки, исключая простой текст - PullRequest
0 голосов
/ 13 января 2010

Так что я собираюсь почистить ссылки на веб-сайтах rapidshare.com. У меня есть следующие регулярные выражения для поиска ссылок:

<a href=\"(http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4}))\"

http://rapidshare.com/files/(\\d+)/(.+)\\.(\\w{3,4})

Как мне написать регулярное выражение, исключающее текст, встроенный в тег <a href="...">. и только захватить текст в >here</a>

Я также должен учитывать, что не все ссылки встроены в теги href. Некоторые из них отображаются в виде простого текста.

В принципе, есть ли способ исключить шаблоны в регулярных выражениях?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 13 января 2010

Чтобы захватить внутренний текст тега привязки, игнорируя при этом весь текст атрибута тега, используйте шаблон:

<a href="http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4})[^>]*>(.*?)</a>

Часть [^>] * соответствует всему остальному в вашем теге вплоть до конца начального тега. (. *?) Выполняет нежадный захват внутреннего текста.

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

[^'"]http://rapidshare.com/files/(\d+)/(.+)\.(\w{3,4})
0 голосов
/ 13 января 2010

Как насчет чего-то вроде:

/http:\/\/rapidshare.com\/files\/\d+\/[^<&\s]+\.\w{3,4}/

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

Вы можете расширить [^<&"\s], поскольку он исключает только пробелы, символ <, который может быть началом тега, &, который будет включать такие вещи, как &nbsp; и другие объекты HTML или ", который будет концом href=. но вы можете исключить любой недопустимый символ URI , если хотите. Это должно относиться как к встроенному тексту, так и к тем, которые встроены в href.

0 голосов
/ 13 января 2010

Как примерно так, последняя часть будет пытаться соответствовать любой вещи, кроме ' " >

http://rapidshare.com/files/(\d+)/([^'"> ]+)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...