類型
當查找資料夾時;當不知道真正字元或者不想鍵入完整名字時,常常使用通配符代替一個或多個真正字元。
星號(*)
可以使用星號代替零個、單個或多個字元。如果正在查找以AEW開頭的一個檔案,但不記得檔案名稱其餘部分,可以輸入AEW*,查找以AEW開頭的所有檔案類型的檔案,如AEWT.txt、AEWU.EXE、AEWI.dll等。要縮小範圍可以輸入AEW*.txt,查找以AEW開頭的所有檔案類型並.txt為擴展名的檔案如AEWIP.txt、AEWDF.txt。
問號(?)
可以使用問號代替一個字元。如果輸入love?,查找以love開頭的一個字元結尾檔案類型的檔案,如lovey、lovei等。要縮小範圍可以輸入love?.doc,查找以love開頭的一個字元結尾檔案類型並.doc為擴展名的檔案如lovey.doc、loveh.doc。
通配符包括星號“*”和問號“?”
星號表示匹配的數量不受限制,而後者的匹配
字元數則受到限制。這個技巧主要用於英文搜尋中,如輸入““computer*”,就可以找到“computer、computers、computerised、computerized”等單詞,而輸入“comp?ter”,則只能找到“computer、compater、competer”等單詞。
使用模式
通配符優先權
對於使用通配符模式的各種資源,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 模式相匹配。由於找到一個匹配項,任何可套用於匹配此模式的對象的策略都將適用。
下表顯示了通配符元素的優先權。表中較高位置的元素優先於表中較低位置的元素。
表:通配符元素優先權規則
優先權 元素 示例
2 字元範圍 [Aa], [[:digit:]]
3 任意字元 ?
4 重複的精確字元 a+
5 重複的字元範圍 [Aa]+, [[:digit:]]+
6 重複的任意字元 ?+
7 任意字元串 *
根據資源的種類,將通過從開始到結束(或者相反方向)逐個元素比較模式來確定優先權。匹配檔案名稱稱的模式是從開始比較到結束。匹配主機名稱的模式是從結束比較到開始。
除了認為相同的兩種模式之外,將認為較長的模式比較短的模式更具體,除非較長的字元串是由於星號(*)而較長。
通配符優先權的示例
表 4 顯示了按優先權從最高到最低排列的檔案名稱和
主機名通配符模式。
表 4. 通配符模式優先權示例
優先權 檔案名稱稱模式 主機名稱模式
1 log/0[0-9]/error
2 log/0?/error
3 log/0*/error
4 log/[0-9]+/error.1
5 log/*/error.1
6 log*/error.1
7 log*/error
8 log*/error* *
9 log*
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 中,可使用以下通配符:
通配符 | 描述 |
---|
% | 替代零個或多個字元 |
_ | 僅替代一個字元 |
[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 |