相关疑难解决方法(0)

使用正则表达式验证数值范围

我的输入数字是一个int.但输入数字必须在-2055到2055的范围内,我想通过使用正则表达式来检查.

那么无论如何要写一个正则表达式来检查一个数字是否在(-2055,2055)中?

if语句用于检查数字是否在范围内更容易.但是我正在写一个解释器,所以我应该使用正则表达式来检查输入数字

regex ocaml

29
推荐指数
6
解决办法
7万
查看次数

数字范围的正则表达式生成器

我检查了stackExchange描述,算法问题是允许的主题之一.所以这里.

给定一个范围的输入,其中开始和结束的数字具有相同的位数(例如,2,3或4),我想编写代码来生成一组正则表达式,当依次对数字进行检查时告诉我这个数字是否在原始范围内.

例如:如果范围是145-387,那么146,200和280都将匹配所生成的正则表达式之一,而144,390(过去就是290)和445(过去就是345)则不会.

我一直在想结果将是一个正则表达式列表,如:

14[5-9]             // match 145-149
1[5-9]0-9]          // 150-199
2[0-9][0-9]         // 200-299
3[0-7][0-9]         // 300-379
38[0-7]             // 380-387
Run Code Online (Sandbox Code Playgroud)

然后软件检查该号码将测试以查看被测试的3位数代码是否与这些中的任何一个匹配.

那么生成表达式集的最佳方法是什么?

我提出的最新(系列)是:

  1. 确定两个范围编号不同的第一个数字(1145-1158,第一个不同的数字是第3个)
  2. 对于不同的数字,确定它们的第一个数字是否相差多于一个 - 如果是这样,那么它的范围得到它自己的正则表达式(在我们的例子中为200-299)
  3. 获得更低的范围:对于每个其他数字:从范围的开头开始的第一个数字的前缀,将数字增加1,将0s填充到相同的长度,并与数字中的数字9对应地方和所有填充的地方.在我们的例子中,增加4到5,pad得到150,生成正则表达式来处理150-199.
  4. 获得更高的范围:对于每个其他数字:从范围结束开始的第一个数字的前缀,逐个数字递减,0秒的填充休息,在所有填充的0个位置和减少的数字与9s的数字配对.在我们的例子中,正则表达式处理300-379.

我错过了什么吗?即使在上面我还有一些细节,我正在掩饰,似乎有些东西可以从算法剑中掠过细节.但我提出的其他事情甚至比这更糟糕.

regex algorithm

12
推荐指数
2
解决办法
9243
查看次数

标签 统计

regex ×2

algorithm ×1

ocaml ×1