正则表达式中应转义哪些文字字符?

我刚刚编写了一个与php函数一起使用的正则表达式preg_match,其中包含以下部分:

[\w-.]

匹配任何单词字符,以及减号和点。虽然它似乎可以在preg_match中工作,但我尝试将其放入名为Reggy的实用程序中,并且它抱怨

“ char类的空范围” 。反复试验告诉我,这个问题已通过转义减号,将正则表达式转换为

[\w\-.]

由于原始版本似乎可以在PHP中运行,所以我想知道为什么还是应该转义减号,并且-因为点也是PHP中具有含义的字符-

为什么我不需要转义该点。我使用的实用程序是不是很愚蠢,是否与其他regex方言一起使用,还是我的regex真的不正确,我是否很幸运preg_match让我摆脱了它?

回答:

在许多正则表达式实现中,以下规则适用:

字符类中的元字符是:

  • ^ (否定)
  • - (范围)
  • ] (课程结束)
  • \ (转义字符)

所以这些都应该逃脱。但是,有些极端情况:

  • -如果放在课程的开头或结尾([abc-][-abc]),则无需转义。在许多正则表达式实现中,当直接放在范围([a-c-abc])或简写字符类([\w-abc])之后时,也无需转义。这就是你观察到的
  • ^不在 类开头时不需要转义:[^a]表示除以外的任何字符a,并[a^]匹配a^,等于:[\^a]
  • ]如果它是类中的唯一字符,则无需转义:[]]匹配char]

以上是 正则表达式中应转义哪些文字字符? 的全部内容, 来源链接: utcz.com/qa/397867.html

回到顶部