正则表达式中是否有一种方法可以使用“不”(^)来匹配多个字符?

3

我想创建一个正则表达式模式,用于匹配所有相对路径。

我想要匹配的内容:

<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][^:][^/][^/])\

src 属性将始终使用双引号(")进行格式化,而不是单引号(')。它将始终包含一个"http"的源,而不是"https"或其他。


1
你没有理解 ^ 的工作原理。它用于否定字符类中的字符。因此,[^http://] 的真正含义是“匹配任何不是 htp:/ 的字符”。 - NullUserException
我知道...但我只是举了一些例子来帮助人们理解我想做什么。 - Tyilo
1个回答

9
解决这个问题的方法是使用负向先行断言:
^img src="(?!http:\/\/\S+).*"$

Rubular link

^                  : 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

非常感谢!顺便问一下,你知道如何在stackoverflow中添加img src="http://example/image.png"(带括号),并将其显示为文本吗? - Tyilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接