这个正则表达式正在寻找什么

时间:2012-02-27 14:35:32

标签: php regex preg-match

preg_match ("/[-_^%&().A-Z0-9]/", $file)

从它的外观来看,我可以看到尾端是Anything A-Z和0-9,但是一开始并不确定。因为^没有被转义所以它可以是文字“^”或评估为NOT,并且与“。”,“(”和“)”相同。所以我只是有点困惑。在可选[]中包含内容是否意味着事物已被字面化了?

2 个答案:

答案 0 :(得分:3)

它只是查找字符类中的一个字符。即其中之一:

  • 连字号,下划线,插入符号,百分比,符号,括号,点
  • 大写拉丁字母
  • 阿拉伯数字

^仅在类的最开始时被解释为否定字符类。 .完全丧失了在角色类中的特殊含义。所以是的,在字符类中,字面上使用了许多特殊的正则表达式字符。除了例外情况,以下列表并非详尽无遗:

  • 连字符(-)表示两个其他字符之间的范围(即不在开头或结尾)。
  • 如上所述的插入符号(^)。
  • 也可以使用预定义的字符类(例如\w),它将与该类中的字符形成联合。因此,您的角色类可以缩短为[-^%&().\w]

答案 1 :(得分:2)

^[]内仅具有特殊含义,如果它是第一个字符。
如果在两个文字字符之间,则-[]内只有特殊含义。

.()[]内没有特殊含义。

只需阅读docs中的基本信息即可告诉您所有这些。

正则表达式只匹配类中的一个字符。