regex - 正则表达式字符类中的空格产生奇怪的结果

标签 regex

所以我正在研究一些正则表达式,并在正则表达式中遇到了一些奇怪的行为。

我在正则表达式中有一个字符类,其中包含一堆字符(字母数字)并以空格、破折号和加号结尾。使用以下正则表达式可以重现这种奇怪的行为。

^[ -+]*$

所以会发生什么是空格是有效的文本输入,加号也是如此。但是,由于某种原因,破折号不是有效的文本输入。正则表达式可以通过重新排列类中的字符来修复,如下所示:
^[ +-]*$

现在所有字符都是有效输入。这已在 Chrome 中使用 jsFiddle 复制并且还使用 Expresso。

我的问题基本上是,我做错了什么还是只是奇怪? :)

最佳答案

-字符在字符类中具有特殊含义。当它出现在两个字符之间时,它会创建一个范围,例如[0-9]匹配 0 之间的任何字符和 9 , 包括的。但是,当放置在字符类的开头或结尾时(或转义时),它表示文字 -特点。

  • [ -+]将匹配空格(字符代码 32)和 + 之间的任何字符(字符代码 43),包括在内。
  • [ +-]将匹配一个空格(字符代码 32),一个 + (字符代码 43),或 - (字符代码 45)
  • 关于regex - 正则表达式字符类中的空格产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24247507/

    相关文章:

    mysql - 如何查找表中遵循模板的所有行?

    javascript - 如何从字符串数组中分割数字和字符串?

    java - 正则表达式仅忽略字符串中的价格

    python - Python 正则表达式中的 UTF

    objective-c - 如何在 iOS 中验证美国或加拿大的邮政编码?

    c# - 如何选择首选(但特定)正则表达式匹配而不是默认(但通用)正则表达式匹配?

    Python和正则表达式从带有罗马数字的docx中提取标题

    JavaScript 正则表达式来验证复杂的字符串

    java - 用正则表达式匹配规则替换每个单词的第一个元音

    javascript - 在 witt 的最后...... Javascript 不会取代 '\n' !