Regex 使用正则表达式查找没有特定单词模式的URL
我正在尝试编写一个正则表达式,可以匹配没有特定模式的URL。我试图过滤掉的URL中不应该有ID,即40个十六进制大写字符 例如,如果我有以下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
/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)*$
,因为不应该有任何空格。谢谢,解释帮助很大。到目前为止,消极前瞻对我来说是最难理解的事情。谢谢,这个解释帮助很大。到目前为止,消极前瞻是我最难理解的事情。