由括号括起来的一组字符组成的正则表达式称为字符类;它匹配任何一个封闭的字符。例如,
[AEIOU]
匹配任何字符A
、E
、I
、O
或U
.字符范围可以通过使用连字符在字符类中进行缩写。连字符左边的字符定义了范围的开始;紧挨着右边的字符定义了结束。因此,
[0-9]
匹配任何数字,并[a-zA-Z][0-9]
匹配一个字母后跟一个数字。如果没有左操作数和右操作数,字符类中的连字符表示自身,因此字符类[+-]
和[-+]
匹配 a+
或 a-
。字符类[A-Za-z-]+
匹配包含连字符的单词。
[+-]
和有什么区别[-+]
。在我看来,我也在做同样的事情。有什么作用[A-Za-z-]+
?
$ awk '/[Y-Zy-z-]/' countries
India 1267 746 -Asia
$ awk '/[Y-Zy-z-]+/' countries
India 1267 746 -Asia
U 8649 275 Asia
Canada 3852 25 North America
China 3705 1032 Asia
USA 3615 237 North America
India 1267 746 -Asia
Mexico 762 78 North America
France 211 55 Europe
Japan 144 120 Asia
England 94 56 Europe
或者我试过
awk '/[^-]/' countries
我期望没有任何输出。
$ awk '/[^-]/ countries
U 8649 275 Asia
Canada 3852 25 North America
China 3705 1032 Asia
USA 3615 237 North America
India 1267 746 -Asia
Mexico 762 78 North America
France 211 55 Europe
Japan 144 120 Asia
England 94 56 Europe
文本指的是要匹配
-
括号表达式中[...]
的破折号 , ,破折号必须首先出现或最后出现在[...]
(或紧跟在首字母之后^
,如[^-]
匹配任何不是破折号的单个字符)。[+-]
和之间没有区别[-+]
。两者都匹配 a+
或 a-
。该表达式将匹配来自to和 from to和破折号
[A-Za-z-]+
的多个(超过零,由于+
之后[...]
)ASCII 字符。破折号也可以放在第一位,如.A
Z
a
z
[-A-Za-z]+
请注意,此表达式中的内部两个破折号表示范围,而最后一个破折号(或第一个 in
[-A-Za-z]+
)表示文字破折号字符。+
after[...]
修改表达式,使其匹配 . 中的一个或多个字符[...]
。如果没有+
,表达式将只匹配一个字符,而不是带有可选破折号的单词。第二个屏幕截图显示您正在匹配
[Y-Zy-z-]
并[Y-Zy-z-]+
针对某些数据。对于这两种模式,您会得到相同的结果,因为这是唯一包含 set 中的一个或多个字符的行
YZyz-
。匹配的-
字符是子字符串中的字符-Asia
。然后你尝试了
[^-]
. 这匹配所有行,因为所有行都包含一些不是-
.