整数常量和二进制数的正则表达式

时间:2010-01-22 06:28:14

标签: regex

我试过两个问题,你能告诉我我是否对吗?

  1. C中非负整数常量的正则表达式,其中以0开头的数字是八进制常量,其他数字是十进制常量。

    我试过0([1-7][0-7]*)?|[1-9][0-9]*,是不是?我能匹配什么字符串?您认为034567是否匹配且000083匹配?

  2. 二进制数 x 的正则​​表达式是什么, h x + i x = j X

  3. 我试过(0|1){32}|1|(10))..您认为像10这样的字符串会匹配而且11会匹配吗?

    请告诉我,我是否对。

6 个答案:

答案 0 :(得分:2)

您可以随时使用http://www.spaweditor.com/scripts/regex/快速测试特定正则表达式是否按预期运行。这与谷歌一起可以帮助你找到你想要的正则表达式。

答案 1 :(得分:1)

整数常量的正则表达式不会匹配长于两位数的基数10和长度超过三位数的八进制数(如果不计算前导零,则为2)。由于这是一个家庭作业,我把它留给你来弄清楚它有什么问题。

提示:谷歌的“正则表达式重复量词”。

答案 2 :(得分:1)

  1. 0([1-7][0-7])?|[1-9][0-9]是错误的,因为没有重复 - 它只匹配1或2个字符的字符串。您需要的是类似0[0-7]*|[1-9][0-9]*的内容,但不考虑十六进制(根据规范)。
  2. 这个不清楚。您能改写一下还是提供更多例子?

答案 3 :(得分:1)

问题1:

八进制数字:

以[0]开头的字符串,然后可以跟随任何数字1,2,... 7 [1-7](假设没有前导零)但在第一个实际数字后也可以包含零,所以[0-7] *(*用于重复,零次或多次)。

因此我们得到以下RegEx:0 [1-7] [0-7] *

十进制数字:

十进制数字必须没有前导零,因此从1到9 [1-9]的所有数字开始,但是在所有其他位置也允许零,因此我们需要连接[0-9] *

因此我们得到以下RegEx:[1-9] [0-9] *

由于我们有两个选项(八进制和十进制数),并且任何一个都可以,我们可以使用Alternation属性' |' :

L = 0 [1-7] [0-7] * | [1-9] [0-9] *

问题2:

快速了解费马的最后定理:

  

在数论中,费马的最后定理(有时称为费马猜想,特别是在旧文本中)表明没有三个正整数a,b和c可以满足等式a + bn = cn对于任何大于2的整数值。   (http://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem

因此,以下集合中n< = 2满足等式:{0,1,2} base10 = {0,1,10} base2

如果这些元素中的任何一个满足等式,我们使用Alternation | (或)

所以正则表达式可以是:L = 0 | 1 | 10但也可以是L = 00 | 01 | 10甚至是L = 0 | 1 | 10 | 00 | 01

或者可以概括为:

  1. {0}我们可以拥有无​​限数量的零:0 *
  2. {1}我们可以有无数个零,然后是1:0 * 1
  3. {10}我们可以有无数个零,然后是10:0 * 10
  4. 所以L = 0 * | 0 * 1 | 0 * 10

答案 4 :(得分:0)

max回答了第一个问题。

第二个似乎是费马最后定理的不可解的丢番图方程。如果h,i,j是非零整数,x只能是1或2,所以你正在寻找

^0*10?$

有帮助吗?

答案 5 :(得分:0)

有几种工具可用于测试正则表达式,例如The Regulator

如果您搜索“正则表达式测试”,您会找到许多指向在线测试人员的链接。