Regexp [xyz]与[x | y | z]

时间:2013-06-24 20:19:39

标签: regex

有什么区别:

[xyz]

[x|y|z]

如果有的话? []和|指定替代方案。

以下代码打印完全相同的结果:

String string = "the x and the y and the z and the nothing";
evaluatePattern(Pattern.compile("\\w*[xyz]\\w*"), string);
evaluatePattern(Pattern.compile("\\w*[x|y|z]\\w*"), string);

6 个答案:

答案 0 :(得分:7)

[xyz]仅匹配三个字符 - xyz。它与(x|y|z)

相同

[x|y|z]匹配4个字符 - xyz|。它与(x|y|z|\|)

相同

请注意,pipe(|)Character Class内没有特殊意义。

答案 1 :(得分:3)

正如其他人所说,[x|y|z]将匹配四个字符中的一个 - xyz|。这是因为,在字符类内部(与正则表达式中的其他地方不同),大多数情况下,唯一的“特殊字符”是],它结束了字符类。

同样,这个:[.^$|]将匹配五个字符中的一个 - .^$|

此规则有一些“例外” - 例如:[^abc]将匹配任何单个字符 ab或{{ 1}}。您还可以指定一系列字符 - 例如,c匹配任何一个小写字母。

还应该注意的是,对于大多数正则表达式引擎,尽管像[a-z]这样的字符不需要在字符类中转义,但.仍然被认为是试图逃避它们。例如,\仅匹配字符[\.],而.匹配其中一个字符[\\.]\

可以在此处找到有关字符类的更全面的解释:http://www.regular-expressions.info/charclass.html。特别要注意标题为“字符类内的元字符”的部分。

答案 2 :(得分:1)

模式[x|y|z]将与字符串"|"匹配,而[xyz]则不匹配。括号创建character class,其中包含字符xyz|

答案 3 :(得分:0)

  1. [xyz]是一组字符xyz
  2. [x|y|z]是一组字符xyz以及|
  3. 其中一个人有一个额外的角色,它会匹配。

答案 4 :(得分:0)

[xyz]实际上等同于(?:x|y|z),但它们可能有不同的内部表示形式。第二个可能更慢。我刚刚更改它以删除捕获组。

答案 5 :(得分:0)

如有疑问,只需查看this cheat sheet,了解不同正则表达式及其规则的示例。

希望它有所帮助。