【问题标题】:Regex number range for nonexistent dates不存在日期的正则表达式数字范围
【发布时间】:2013-06-20 12:54:38
【问题描述】:

我正在尝试在程序Bulk Image Downloader 中使用忽略列表,而包含/排除列表使用正则表达式。该程序允许您搜索范围,例如:

http://example.com/gallery/page[1-99].htm 

从页面中提取图像

example.com/gallery/page1.htm  
example.com/gallery/page2.htm  
…  
example.com/gallery/page99.htm

够简单吧?搜索使用"yyyymmdd" 格式而不是使用简单"page#" 格式的网站时会出现此问题。

我想出了这个

example.com/[yyyy0101-yyyy1231].html

无论哪一年我从原地yyyy 下载以拉取所有适当的页面,我都会浏览并删除谷壳。问题是它搜索的不是搜索 365 个页面 1131 并且搜索时间大约是 12 倍,因为它搜索所有不存在的日期并尝试不响应的页面 4 次。

然后我找到了一个解决方法:

example.com/images/[yyyy0101-yyyy1231].png

因为我从中下载的一些网站将它们的图像都集中在一个地方。但我遇到了同样的问题,但反过来。图片搜索几乎立即结束,但所有不存在的日期都有虚假图片(程序为它们提供占位符),这些图片在下载而不是搜索时需要很长时间才能完成。

所以我尝试为排除列表编写一个正则表达式,它会自动删除在不存在的日期范围内找到的任何内容。我什至查看了每个月有多少天,并确保在 2 月 29 日离开闰年。看吧。

[0132-0200]
[0230-0300]
[0332-0400]
[0431-0500]
[0532-0600]
[0631-0700]
[0732-0800]
[0832-0900]
[0931-1000]
[1032-1100]
[1131-1200]

原来正则表达式不像程序本身那样工作。我试着查了一下,坦率地说并没有很好地理解它。

那么这到底应该是什么样子呢?

我不需要任何排除正则表达式,因为它会进入忽略列表。虽然它可能对其他人有用。

编辑

开始

我希望程序通过隔离无效/不存在的 mmdd 日期,仅在照片上显示来自真实日期的图片。 我不知道程序使用的是什么风格的正则表达式。从他们的网站:

以下字符在正则中使用时具有特殊含义 表达式,并且如果您想使用,必须以反斜杠 (\) 为前缀 它们作为正则表达式中的文字。

[, \, ^, $, ., |, ?, *, +, (, ), /

^ = 行首 $ = 行尾。 = 匹配任何字符 \x = 使用 文字字符 x

正则表达式的详细解释请访问 http://wikipedia.org/wiki/Regular_expression

结束

编辑

【问题讨论】:

  • 考虑避免使用正则表达式的日期。如果有问题的日期属于September 1752
  • 你的问题不清楚,你的情况也不清楚。在正则表达式问题中最重要的是1) 语言或正则表达式风格2) 预期输入3) 预期输出。您可能对my previous answer 感兴趣,这表明可以匹配日期,但根本不实用。

标签: regex


【解决方案1】:

根据 Bulk Image Downloader 用作正则表达式引擎的方式,您可以尝试:

example.com/[201301-201312](0[1-9]|[1-2][0-9]|3[0-1]).html

这应该让您为您选择的年份选择有效月份

[201301-201312]

那么日期可以是 01 - 09

0[1-9]

10-29

[1-2][0-9]

或 30,31

3[0-1]

使用 or 运算符将日期部分组合成一个组

(0[1-9]|[1-2][0-9]|3[0-1])

如上所述将它们放在一起,它可能会工作一整年。再次取决于他们决定使用哪个正则表达式引擎。

【讨论】:

  • 因为这是核心的正则表达式功能,没有什么棘手的,它在任何正则表达式引擎中的工作方式都是一样的。 (相反,如果它不起作用,它不会被解释为正则表达式/而不是其他东西。)
猜你喜欢
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2016-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多