RegExp: хотите найти все ссылки, которые не заканчиваются на ".html" - PullRequest
3 голосов
/ 25 марта 2010

Я относительный новичок в регулярных выражениях (хотя я использовал их много раз успешно). Я хочу найти все ссылки в документе, которые не заканчиваются на ".html" Регулярное выражение, которое я придумал:

href=\"([^"]*)(?<!html)\"

В Notepad ++, мой редактор, href=\"([^"]*)\" находит все ссылки (как те, которые заканчиваются на "html", так и те, которые не имеют). Почему не работает отрицательный взгляд?

Я также пробовал смотреть в будущее:

href=\"[^"]*(?!html\")

но это тоже не сработало.

Кто-нибудь может помочь?

Приветствия, унижение

Ответы [ 5 ]

8 голосов
/ 25 марта 2010

Это регулярное выражение будет работать нормально, если вы используете PERL или PCRE (например, preg_match в PHP).Тем не менее, прогнозные и прогнозные утверждения не поддерживаются большинством, особенно более простыми механизмами регулярных выражений, такими как тот, который используется в Notepad ++.Только самые базовые синтаксисы, такие как квантификаторы, подшаблоны и классы символов, поддерживаются почти всеми механизмами регулярных выражений.

Документацию для механизма регулярных выражений notepad ++ можно найти по адресу: http://sourceforge.net/apps/mediawiki/notepad-plus/index.php?title=Regular_Expressions

1 голос
/ 25 марта 2010

Вы можете сделать регулярное выражение, которое делает это, но это, вероятно, будет слишком сложно:

href=\"((([^"]*)([^h"][^"][^"][^"]|[^t"][^"][^"]|[^m"][^"]|[^l]))|([^"]|)([^"]|)([^"]|))\"
1 голос
/ 25 марта 2010

Редактировать: Notepad ++ использует механизм регулярных выражений SciTE, и он не поддерживает просмотр выражений.

Для получения дополнительной информации посмотрите здесь http://www.scintilla.org/SciTERegEx.html


Оригинальный ответ

<code>^.*(?<!\.html)$

0 голосов
/ 28 марта 2013

Обратите внимание, что Notepad ++ (сейчас?) Поддерживает утверждения , как это. (У меня есть Блокнот ++ 6.3 от 3 февраля 2012 г.)

Я полагаю, что документация Regular Expressions подразумевает, что оба варианта замены используют один и тот же диалект PCRE:

  • стандарт: Search | Replace (ярлык по умолчанию Ctrl H)
  • плагин: TextFX | TextFX Quick | Find/Replace (ярлык по умолчанию Ctrl R)
0 голосов
/ 25 марта 2010

Спасибо всем большое.

В конце концов, регулярное выражение действительно не сработало.

Я просто использовал обходной путь и заменил все ссылки на себя + ". Html", затем заменил все вхождения ".html.html" на ".html".

Итак, я заменил href=\"([^"]*)\" на href="\1.html", а затем .html.html на .html

В любом случае, спасибо, унижаться

...