正则表达式中应转义哪些文字字符?
我刚刚编写了一个与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