通配符知识学习

通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。实际上用“*Not?paOd”可以对应Notpad\MyNotpad*可以代表任何文字】;Notpad\Notepad?仅代表单个文字】;Notepad\Notepodao代表ao里二选一】,其余以此类推。

一、基本概念

  通配符是一类键盘字符,有星号(*)和问号(?).

  当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者不想键入完整名字时,常常使用通配符代替一个或多个真正字符。

星号(*):

  可以使用星号代替0个或多个字符。如果正在查找以AEW开头的一个文件,但不记得文件名其余部分,可以输入AEW*,查找以AEW开头的所有文件类型的文件,如AEWT.txtAEWU.EXEAEWI.dll等。要缩小范围可以输入AEW*.txt,查找以AEW开头的所有文件类型并.txt为扩展名的文件如AEWIP.txtAEWDF.txt

问号(?):

  可以使用问号代替一个字符。如果输入love?,查找以love开头的一个字符结尾文件类型的文件,如loveylovei等。要缩小范围可以输入love?.doc,查找以love开头的一个字符结尾文件类型并.doc为扩展名的文件如lovey.docloveh.doc

通配符包括星号“*”和问号

  星号表示匹配的数量不受限制,而后者的匹配字符数则受到限制。这个技巧主要用于英文搜索中,如输入““computer*”,就可以找到“computercomputerscomputerisedcomputerized”等单词,而输入“comp?ter”,则只能找到“computercompatercompeter”等单词。

二、使用模式

通配符优先级

  对于使用通配符模式的各种资源,Tivoli Access Manager for Operating Systems 必须确定将应用何种通配符模式。例如,假设有两种模式:

  /usr/local/*.log

  和

  /usr/local/user1/*.log

  字符串 /usr/local/user1/x.log 与这两种模式都匹配。

  为了解决这种模棱两可的情况,应用了优先级规则。模式越具体,其优先级也越高。根据这种原则,/usr/local/user1/x.log 在与 /usr/local/*.log 模式相匹配之前先与 /usr/local/user1/*.log 模式相匹配。由于找到一个匹配项,任何可应用于匹配此模式的对象的策略都将适用。

  下表显示了通配符元素的优先级。表中较高位置的元素优先于表中较低位置的元素。

  表:通配符元素优先级规则

优先级

元素

示例

1

精确字符

a, \*,\\

2

字符范围

[Aa], [[:digit:]]

3

任意字符

?

4

重复的精确字符

a+

5

重复的字符范围

[Aa]+, [[:digit:]]+

6

重复的任意字符

?+

7

任意字符串

*

  根据资源的种类,将通过从开始到结束(或者相反方向)逐个元素比较模式来确定优先级。匹配文件名称的模式是从开始比较到结束。匹配主机名称的模式是从结束比较到开始。

  除了认为相同的两种模式之外,将认为较长的模式比较短的模式更具体,除非较长的字符串是由于星号(*)而较长。

通配符优先级的示例

  下表 显示了按优先级从最高到最低排列的文件名和主机名通配符模式。

  . 通配符模式优先级示例

  

优先级

文件名称模式

主机名称模式

1

log/0[0-9]/error

www.[a-z]tv.com

2

log/0?/error

www.?tv.com

3

log/0*/error

www.*tv.com

4

log/[0-9]+/error.1

www-help.[a-z]+v.com

5

log/*/error.1

www-help.*v.com

6

log*/error.1

www-help.*.com

7

log*/error

www.*.com

8

log*/error*

*www.*.com

9

log*

*.com

10

*

*

  当两个模式之间的唯一差别是字符集合中指定的字符时,将通过逐字比较包含模式的两个字符串来确定优先级。仅在要匹配的字符集包含一些相同字符时才必须考虑这一点。如果在两个集合中没有公共字符,则任一给定的字符串最多只能匹配这两个模式中的一个。

路由配置中的通配符

  在路由器的配置中,经常出现通配符。和子网掩码一样,都是以“0”“1”表示,不过与子网掩码所表示的意思却不一样。

  子网掩码所表示的是IP的网络位和主机位,而通配符则表示与IP是否匹配。

  通配符同样是32位,和IP地址一一对应,“0”位代表精确匹配,而“1“位代表不许匹配。例如路由器EIGRP的配置中:

  RouterA(config)#router eigrp 100

  RouterA(config-router)#network 10.0.0.0 0.0.0.255

  RouterA(config-router)#network 192.168.1.0 0.0.0.255

  10.0.0.0 0.0.0.255说明只要接口的IP地址是以“10”开头就参与EIGRP进程。同理的,192.168.1.0 0.0.0.255说明只要IP是以192.168.1开头的IP就符合。

三、SQL 通配符

  在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符。

  SQL 通配符必须与 LIKE 运算符一起使用。

  在 SQL 中,可使用以下通配符:

  

通配符

描述

%

替代一个或多个字符

_

仅替代一个字符

[charlist]

字符列中的任何单一字符

[^charlist]
或者
[!charlist]

不在字符列中的任何单一字符

原始的表 (用在例子中的)

  Persons :

  

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

3

Carter

Thomas

Changan Street

Beijing

使用 % 通配符

例子 1

  现在,我们希望从上面的 "Persons" 表中选取居住在以 "Ne" 开始的城市里的人:

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE City LIKE 'Ne%'结果集:

Id

LastName

FirstName

Address

City

2

Bush

George

Fifth Avenue

New York

例子 2

  接下来,我们希望从 "Persons" 表中选取居住在包含 "lond" 的城市里的人:

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE City LIKE '%lond%'结果集:

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

使用 _ 通配符

例子 1

  现在,我们希望从上面的 "Persons" 表中选取名字的第一个字符之后是 "eorge" 的人:

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE FirstName LIKE '_eorge'结果集:

Id

LastName

FirstName

Address

City

2

Bush

George

Fifth Avenue

New York

例子 2

  接下来,我们希望从 "Persons" 表中选取的这条记录的姓氏以 "C" 开头,然后是一个任意字符,然后是 "r",然后是任意字符,然后是 "er"

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE LastName LIKE 'C_r_er'结果集:

Id

LastName

FirstName

Address

City

3

Carter

Thomas

Changan Street

Beijing

使用 [charlist] 通配符

例子 1

  现在,我们希望从上面的 "Persons" 表中选取居住的城市以 "A" "L" "N" 开头的人:

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE City LIKE '[ALN]%'结果集:

Id

LastName

FirstName

Address

City

1

Adams

John

Oxford Street

London

2

Bush

George

Fifth Avenue

New York

例子 2

  现在,我们希望从上面的 "Persons" 表中选取居住的城市不以 "A" "L" "N" 开头的人:

  我们可以使用下面的 SELECT 语句:

  SELECT * FROM PersonsWHERE City LIKE '[!ALN]%'结果集:

Id

LastName

FirstName

Address

City

3

Carter

Thomas

Changan Street

Beijing

 

你可能感兴趣的:(通配符)