Все, кроме подвыражений - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь сделать регулярное выражение для определения относительных путей src, используя PHP.Чтобы сделать это, моя идея заключалась в том, чтобы использовать предварительный просмотр (? = Тогда не ^ и подвыражение (http), но это не работает. Он работает для одного символа, но ^ не работает с подвыражением.&& оператор или что-то?

 <img.*?src=[\'\"]\(?=^(http))

Мне нужно взять весь http или иначе imgs, начиная с h, t или p, будут иметь предубеждение. Любые предложения? Эта задача слишком велика для регулярного выражения?

Ответы [ 2 ]

2 голосов
/ 05 мая 2011

Вы можете использовать отрицательный прогноз, который равен (?!...) вместо (?=...). Для вашего примера (я бы поставил якорь в начале):

^(?!http)

Что гласит: начало строки, затем что-то, что не является "http".

Редактировать : поскольку вы обновили более полный пример:

<img [^>]*src=['"](?!http)([^'"]+)['"]

                          ^------^ - this capturing group captures the link
                                     which doesn't start with http

Конечно, для правильного разбора вы должны использовать DOM;)

0 голосов
/ 05 мая 2011

Это не самый полезный ответ, но звучит так, как будто вы достигли предела применимости для Regex при разборе HTML.

Согласно этот ответ здесь посмотрите на использованиеHTML DOM Parser.Я не очень часто использовал PHP DOM Parser, но я знаю, что на других языках DOM-анализатор часто делает задачи HTML 30-секундной работой, а не часом или более странным тестированием в исключительных случаях.

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