您可以使用一些Microsoft手寫辨識器所理解的手寫正則表示式語法來定義和指派自定義輸入範圍。 語法是 .NET Framework 中 正則表示式語言實作 子集。
手寫正則表達式的使用方式以及使用其他類型的正則表達式的方式有一些差異。 手寫語法是用來指定由辨識引擎比對的確切字串,而不是子字串。 例如,正則表達式 s(a-z]+)p 會傳回 “湯”、“stop”、“instep” 和 “esophagus” 的相符專案。 而相等的手寫正則表達式,例如 s(!IS_ONECHAR)+p 會比對 “湯” 和 “stop”,但不符合 “instep” 和 “esophagus”。
手寫正則表達式不支援正則表達式中的不中斷空格。 也就是說,您無法在手寫正則表達式中使用 「nbsp」 實體。
下列各節將更詳細地說明語法。
有效運算子
下列運算子適用於建立正則表達式,以定義手寫辨識器的輸入範圍。
| 算子 | 描述 |
|---|---|
| * |
後置一元運算符表示作數零個或多個出現次數。 |
| + |
後置一元運算符表示一個或多個作數。 |
| ? |
後置一元運算符表示零或一次作數。 |
| | |
二進位 infix 運算符表示 「or」。 |
| () |
用來將專案分組。 |
手寫辨識器的正則表達式實作Microsoft允許重複應用後置一元運算符。 例如,a** = (a*)* = a*, b?? = (b?)? = b?。 它們也允許非連續重複,例如:a*?* = (a*)?)* = (a*)* = a*。 這與 .NET Framework 正則表示式不同,只允許 ? 要重複的運算子。
.NET Framework 正則表達式的另一個差異是,手寫正則表達式不支援以空白括弧 () 指定的空白表達式。
注意
手寫正則表示式僅支援 1252 代碼頁中的字元。
使用輸入範圍
您也可以在正則表示式中使用定義為 SetInputScope 函式一部分的一組正則輸入範圍。 例如,Month (數值) 的值是IS_DATE_MONTH。 指定輸入範圍做為正則表達式一部分的語法,是在結尾加上具有左括號和驚嘆號的輸入範圍列舉值之前。 例如:
(!IS_DATE_MONTH)
如果您將IS_DEFAULT輸入範圍與任何其他輸入範圍結合,效果就是辨識器可以傳回預設語言模型所支援的任何單一表達式(例如,系統字典或日期中的一個單字),以及符合傳入辨識器之其餘正則表達式的任何值。
注意
正則表達式不支援下列 SetInputScope 成員:IS_PHRASELIST、IS_REGULAREXPRESSION、IS_SRGS IS_XML。
不支援的運算符
建立手寫正則表示式時,不支援下列正則表達式運算符。
| 算子 | 描述 |
|---|---|
| . |
句號字元。 |
| [] |
方括弧。 使用括弧來分組專案。 |
| {} |
大括弧。 |
| (?# comment) 和 #[ comment ] |
評論。 |
| $ |
貨幣符號字元。 |
| ^ |
插入號字元。 |
| - |
虛線字元。 必須或 (|) 將所有專案集結合在一起。 |
逸出字元
下表中以外的一般字元會比對本身。 也就是說,正則表達式中的 「a」 會指定輸入應該符合 「a」。
撰寫手寫正則表達式的另一個顯著差異是,您只能在正則表示式中逸出一組有限的字元。 下表概述可逸出的允許字元集。 任何其他嘗試逸出字元會導致辨識器擲回錯誤。
| 字元 |
|---|
| \* |
| \+ |
| \? |
| \( |
| \) |
| \| |
| \\ |
| \! |
| \. |
| \[ |
| \] |
| \^ |
| \{ |
| \} |
| \$ |
| \# |