Есть ли способ использовать not (^) в регулярных выражениях для нескольких символов? - PullRequest
3 голосов
/ 02 марта 2011

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

То, что я хочу сопоставить:

img src="image.png"
img src="http_image.png"

То, что я не хочу сопоставлять:

img src="http://example/image.png"

Я пытался сопоставить эти шаблоны, но ни один из них не работал:

\src="[^http://]\
\src="^(http://)\
\src="[^h][^t][^t][^p][^:][^/][^/]\
\src="([^h][^t][^t][^p][^:][^/][^/])\

Я исключил <> из img-тега, потому что иначе я не мог написать его как код.
Атрибут src всегда будет отформатирован с двойными кавычками ("), а не с одинарными кавычками (').
Он всегда будет содержать источник" http ", а не" https "или другие.

1 Ответ

9 голосов
/ 02 марта 2011

Способ решить эту проблему - использовать отрицательное прогнозное утверждение:

^img src="(?!http:\/\/\S+).*"$

Рубулярная ссылка

^                  : Start anchor
img src="          : Literal img src="
(?!http:\/\/\S+)   : To ensure the string following " is not a URL
.*                 : Anything else is allowed
"                  : Literal "
$                  : End anchor
...