Regex 使用正则表达式查找没有特定单词模式的URL

Regex 使用正则表达式查找没有特定单词模式的URL,regex,regex-negation,regex-lookarounds,Regex,Regex Negation,Regex Lookarounds,我正在尝试编写一个正则表达式,可以匹配没有特定模式的URL。我试图过滤掉的URL中不应该有ID,即40个十六进制大写字符 例如,如果我有以下URL: /dev/api/appid/A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5/用户 /dev/api/apps/list /dev/api/help/apps/applicationname/apple/osversion/list/ (URL是由URL组成的,但其思想是有些端点具有40个长度I

我正在尝试编写一个正则表达式,可以匹配没有特定模式的URL。我试图过滤掉的URL中不应该有ID,即40个十六进制大写字符

例如,如果我有以下URL:

/dev/api/appid/A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5A1B2C3D4E5/用户

/dev/api/apps/list

/dev/api/help/apps/applicationname/apple/osversion/list/

(URL是由URL组成的,但其思想是有些端点具有40个长度ID,有些端点没有,有些端点的总字符数非常长)

我想确保正则表达式只能匹配最后两个URL,而不能匹配第一个URL

我写了下面的正则表达式

\S+(?:[0-9A-F]{40})\S+

它匹配的端点中确实有长ID,但跳过了应该过滤的端点。如果我试图否定正则表达式

\S+(?![0-9A-F]{40})\S+

它匹配所有端点,因为某些URL的长度大于ID的长度(40个字符)

如何使用正则表达式过滤出所需的URL

^((?![A-F0-9]{40}).)*$
使用负前瞻来匹配行中没有40个十六进制数字的任何行

使用负前瞻来匹配行中没有40个十六进制数字的任何行

试试这个正则表达式:

^(?。*\/[0-9A-F]{40}\/).$

说明:

  • ^
    -断言字符串/url的开头
  • (?!.\/[0-9A-F]{40}\/)
    -检查字符串中是否存在
    /
    后跟40个十六进制字符,后跟
    /
    。因为它是一个负前瞻,所以包含此模式的任何字符串/url都不会匹配
  • *
    -匹配除换行符以外的任何字符的0+次出现次数
  • $
    -断言字符串的结尾
试试这个正则表达式:

^(?。*\/[0-9A-F]{40}\/).$

说明:

  • ^
    -断言字符串/url的开头
  • (?!.\/[0-9A-F]{40}\/)
    -检查字符串中是否存在
    /
    后跟40个十六进制字符,后跟
    /
    。因为它是一个负前瞻,所以包含此模式的任何字符串/url都不会匹配
  • *
    -匹配除换行符以外的任何字符的0+次出现次数
  • $
    -断言字符串的结尾

太棒了,效果非常好。我稍微将它改为
^((?![A-F0-9]{40})\S)*$
,因为不应该有任何空格。太棒了,这非常有效。我稍微将其更改为
^((?![A-F0-9]{40})\S)*$
,因为不应该有任何空格。谢谢,解释帮助很大。到目前为止,消极前瞻对我来说是最难理解的事情。谢谢,这个解释帮助很大。到目前为止,消极前瞻是我最难理解的事情。