这两个正则表达式语句之间有什么区别

时间:2015-07-17 18:45:14

标签: regex

([1|2|3|4|5|6|7|8|9])(1|2|3|4|5|6|7|8|9)

我想检查思科交换机的每个端口是否有指定的命令集。端口编号为1到9.使用正则表达式我希望代码选择每个数字以验证配置。

4 个答案:

答案 0 :(得分:6)

第一个正则表达式没有意义:它意味着“选择1或选择|或选择2或选择3或......或选择9”

第二种意思是“选择1或选择2或选择3或......或选择9”

我认为你在第一个正则表达式中寻找的正则表达式是([123456789]),这与第二个正则表达式完全相同。

为了使其更简单,您可以使用([1-9]),它只是表示范围。

有关正则表达式(更具体地说是perl兼容的正则表达式(PCRE))的更多信息,您可以查看here

答案 1 :(得分:1)

第一个将匹配集合中的任何字符

  

| 123456789

第二个匹配

  

1或2或3或4或5或6或7或8或9

答案 2 :(得分:1)

第一个将匹配以下任何一个:

1 2 3 4 5 6 7 8 9 |

而第二个匹配任何一个:

1 2 3 4 5 6 7 8 9

请注意,第一个相当于:([123456789|])

当然,能够解决您问题的正则表达式(稍微)有所不同:([123456789])([1-9])

答案 3 :(得分:1)

正如其他人所说,“|”在第一个显然是错误的,因为没有必要重复它,因此应该是[123456789]或[1-9]。除此之外,值得注意的是,在数字上下文中,这些确切数据没有功能差异,隐藏了逻辑错误,因为它们碰巧只包含单个字符(第二个“字符串”恰好是单个字符)。但是,([1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10])和(1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10)不会功能相同,即使在数字上下文中,因为只有第一个匹配“0”(冗余的“1”以及无关的“|”),只有第二个匹配10.注意这可能进一步有助于澄清混淆和潜力使这一点变得重要的错误。