我试图在图片扩展之前找到数字(jpg | jpeg | png | bmp | gif | tif)。 但是如果有一个NUMBERSxNUMBERS模式,我想排除它们。 我的表达是:
(?!\ DX \ d)[0-9] {1,}。(JPG | JPEG | PNG | BMP | GIF | TIF)
尝试这些: aoi32x453.jpg ser32xa453.jpeg 如/ as673.jpg x673.png YGT / x673.bmp x673.gif
我需要在表达式之前排除包含'\ dx \ d'的匹配项。
我需要成为一名比赛: sax73.jpg
但我不希望那些拥有'NUMBERSxNUMBERS'的人: 35x35.jpg
答案 0 :(得分:1)
(?!...)
是负面的 - 提前。后视是(?<!...)
。此外,(?<!x.*)
会拒绝任何字符串,如果x
出现在模式之前的字符串中的任何位置。如果您想确保x
没有出现在号码前面,请使用(?<!x)
。
但是,这只会匹配x
后未出现的第一个数字字符。例如在"35x73.jpg"
中,它只会匹配3.jpg
。一个简单的解决方案是通过使用像(?<![x0-9])
这样的后视来确保前一个字符也不是数字。
还有一些注意事项:{1,}
可以简化为+
,[0-9]
可以简化为\d
(尽管根据您的环境,\d
}可以匹配其他数字系统中的数字,例如Eastern Arabic numerals):
(?<![x\d])\d+\.(jpg|jpeg|png|bmp|gif|tif)
答案 1 :(得分:0)
如果您使用的语言没有lookbehind功能(如Javascript),或者因为您需要一个可变长度的lookbehind(仅支持.net语言AFAIK并且在Java中有一些限制),您可以使用捕获组:
(?:^|\s)[^x\s]*?([0-9]+\.(?:jpg|jpeg|png|bmp|gif|tif))(?:\s|$)
您只需要提取第一个捕获组
答案 2 :(得分:0)
(?<=\s)[^x]*?[0-9]+\.(jpg|jpeg|png|bmp|gif|tif)(?=\s)