close
Pattern Matching


樣式可以包含數種萬用字元的特殊字元

*    符合任意數量(包含0個)的字元或空白
?    符合單一個字元
%d   符合任意數量的數字(0-9)
%n   符合以+或-開頭的數字
%w   符合任意數量的英文字母(a-z) (也就是一個單字)
%a   符合任意數量的英數字(a-z,0-9)
%s   符合任意數量的空白字元(空格,tab)
%x   符合任意數量的非空白字元
%y   符合任意數量的非空白字元(跟%x一樣但也符合行首跟行尾)
%p   符合任何標點符號
%q   符合任何標點符號(跟%p一樣但也符合行首跟行尾)
%t   符合方向指令
%e   符合ANSI樣式的ESC字元
[range] 符合任意數量列在range的字元
^    強制pattern符合在行首
$    強制pattern符合在行尾
(pattern)   將符合的pattern存在參數%1到%99

~    防止下一個字元被解釋為萬用字元,符合特殊字元時需要
~~   符合~字元
{val1|val2|val3|...} 符合任何給定的字串,裡面不能再使用萬用字元
@variable    用給定的list或record符合字串
{^string}     不符合給定的字串
&nn       符合恰好nn字元
&VarName    將符合的字串值設給給定的變數(下面有更多資訊)

把pattern的任何部分存到%1..%99參數,用括號()包起來。

給定一個範圍(range),可以列出所有字元[abc]或用範圍[a-c]。

pattern裡要使用萬用字元本身的話,前面加一個引述字元(~),例如樣式~[test~]會解釋為符合[test],而不是解釋為範圍字元。
注意引述字元可以在Preferences裡更改。

要符合空行,使用樣式$。
要符合多數行,中間放入$來符合各行的界限。

pattern裡也可以包括變數,在執行符合測試前,會替換為變數的值

使用 &VarName

&VarName的語法要多加解釋,它用在直接把符合的樣式存入變數,例如,如果你有個trigger

#TRIGGER {You get &Gold coins}

然後MUD顯示

You get 1000 coins

則數值1000自動地放入@Gold變數,不用你更多的動作。
&VarName預設使用*萬用字元,要使用不同的萬用字元,在&字元後插入萬用字元。
在上面的例子,如果MUD顯示

You get many coins

@Gold變數會填入字串"many",要限制trigger只符合數字,把trigger改為

#TRIGGER {You get &%dGold coins}

現在"You get many coins" 不符合這個觸發了。你可以使用任何萬用字元,也可以用方括號[]來定義你自己的萬用範圍。
有時候你要擷取的字串後面有一些英文字。要界定變數名稱,把變數名稱放到大括號{}裡,例如要抓取

You have 1000gp

你可以使用trigger

#TRIGGER {You have &%d{Gold}gp}

只會符合數字而且正確地設@Gold為1000

&VarName語法也可以使用在資料庫紀錄,如果你有一個紀錄變數@char想要設定Gold欄位,
你可以使用觸發:

#TRIGGER {You get &char.Gold coins}

要在資料庫的第7個紀錄設定Gold欄位,你會

#TRIGGER {You get &7.Gold coins}

要設定當前紀錄的Gold欄位,省略紀錄號碼

#TRIGGER {You get &.Gold coins}

這種合併資料庫的語法,提供強大的方法抓取MUD的資訊
注意:用&VarName語法符合的字串還是會算進%1..%99,還是可以用%1..%99存取,
所以下面的列子:

#TRIGGER {Hp: &HpVar Mana: &ManaVar} {#SHOW %1 %2}

會自動設@HpVar跟@ManaVar,%1跟%2也還是跟你用括號括起一樣,
這當你混合&VarName跟()在同一個trigger時很重要,要把&VarName也計算進去
arrow
arrow
    全站熱搜

    suzin 發表在 痞客邦 留言(0) 人氣()