正则表达式不严格遵循负面前瞻?
Regex not strictly following negative lookahead?
我有一个匹配 url 的正则表达式,它在末尾没有 引号(双引号或单引号) 和 有 & url.
中的(& 符号)
我制作的正则表达式
([^'` "\n]+)\.([^ \n]+)&([^ "`'\n]+)(?!["'])
但它只是不接受最后一个词并匹配 url
https://regex101.com/r/vpmqZH/1
以上图为例
google.com/cool?cool1=yes&cool2=no&cool3=no"
url 不应该匹配,因为它最后有 "
但它只是不匹配 'o'
并匹配剩余的 url.
我想做的是,如果这个双引号最后出现,那么就不要匹配整个 url。
您需要在 & 符号后的整个部分启用前瞻。然后我们可以选择
$
行尾
或
(?=\s)
space. 的正面前瞻
([^' "\n]+)\.([^ \n]+)&((?!["'])[^ "'\n])+($|(?=\s)
仅对于匹配,您可以省略捕获组,并使用否定字符 class,如果需要,您应该省略否定字符 class 中的反引号 `
允许匹配它。
[^'"\s.]+\.[^\s'"&]+&[^\s"']+(?!\S)
说明
[^'"\s.]+
匹配除 "
'
.
以外的 1+ 个非空白字符
\.
匹配一个点
[^\s'"&]+
匹配除 "
'
&
以外的 1+ 个非空白字符
&
字面匹配
[^\s"']+
匹配除 "
'
以外的 1+ 个非空白字符
(?!\S)
断言右边的空白边界
看到一个regex demo.
我有一个匹配 url 的正则表达式,它在末尾没有 引号(双引号或单引号) 和 有 & url.
中的(& 符号)我制作的正则表达式
([^'` "\n]+)\.([^ \n]+)&([^ "`'\n]+)(?!["'])
但它只是不接受最后一个词并匹配 url
https://regex101.com/r/vpmqZH/1
google.com/cool?cool1=yes&cool2=no&cool3=no"
url 不应该匹配,因为它最后有 "
但它只是不匹配 'o' 并匹配剩余的 url.
我想做的是,如果这个双引号最后出现,那么就不要匹配整个 url。
您需要在 & 符号后的整个部分启用前瞻。然后我们可以选择
$
行尾
或(?=\s)
space. 的正面前瞻
([^' "\n]+)\.([^ \n]+)&((?!["'])[^ "'\n])+($|(?=\s)
仅对于匹配,您可以省略捕获组,并使用否定字符 class,如果需要,您应该省略否定字符 class 中的反引号 `
允许匹配它。
[^'"\s.]+\.[^\s'"&]+&[^\s"']+(?!\S)
说明
[^'"\s.]+
匹配除"
'
.
以外的 1+ 个非空白字符
\.
匹配一个点[^\s'"&]+
匹配除"
'
&
以外的 1+ 个非空白字符
&
字面匹配[^\s"']+
匹配除"
'
以外的 1+ 个非空白字符
(?!\S)
断言右边的空白边界
看到一个regex demo.