php - 应该在正则表达式中转义哪些文字字符?

标签 php regex escaping pcre

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

[\w-.]

匹配任何单词字符,以及减号和点。虽然它似乎在 preg_match 中工作,但我尝试将它放入一个名为 Reggy 的实用程序中。它提示“char 类中的空范围”。反复试验告诉我,这个问题是通过转义减号,将正则表达式变成

来解决的
[\w\-.]

既然原来的似乎在 PHP 中工作,我想知道为什么我应该或不应该转义减号,并且 - 因为点也是 PHP 中具有含义的字符 - 为什么我不需要转义点。我使用的实用程序是不是很傻,它是在使用另一种正则表达式方言还是我的正则表达式真的不正确,我只是幸运 preg_match 让我侥幸逃脱?

最佳答案

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

字符类中的元字符是:

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

所以这些都应该被转义。不过也有一些极端情况:

  • - 如果放在类的开头或结尾([abc-][-abc] )。在相当多的正则表达式实现中,直接放在范围([a-c-abc])或速记字符类([\w-abc])。这是你观察到的
  • ^ 在类的开头是 not 时不需要转义:[^a] 表示除 a 之外的任何字符[a^] 匹配 a^,等于:[\^a]
  • 如果
  • ] 是类中唯一的字符,则不需要转义:[]] 匹配字符 ]

关于php - 应该在正则表达式中转义哪些文字字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5484084/

相关文章:

javascript - 如何在登录表单上的 drupal 7 中设置占位符

Java regex.pattern 匹配器未返回所需的结果

javascript - 如何使用正则表达式在字符串中返回 2 个独立的 {{...}} block ?

正则表达式前瞻、后瞻和原子组

javascript - 如何在javascript下划线模板中转义<>?

php - 在 mysql 数据库中插入复选框值

php - Composer : Where are Conflicts Between Repositories Settled in Composer's Source

php - 从 WordPress 页面提交表单无法正常工作

escaping - Zend Framework 3 - 元标记奇怪地转义 - 对规范 url 的影响?

linux - ANSI转义序列,如何从键盘输入转义字符?