我們在開發中,經常需要對一些結構化文本進行解析,用於驗證是否符合規則。我們一般會使用正規表式,同時正規表式也非常強大,但正規表式在語法不便閱讀與維護。
下面介紹一個簡單、輕量級的庫,方便我們在C#程式碼中定義解析規則。
01
計畫簡介
Sprache是一個簡單、輕量級的庫,專門用於直接在C#程式碼中構造解析器,以解析如程式碼這類的結構化文本。該庫的設計原則是提供易於理解和使用的API,同時保持足夠的靈活性以應對各種解析需求。
02
計畫特點
1、簡單易用:直接在C#程式碼中定義解析規則。
2、強型別的解析規則:解析規則是強型別的,這意味著它們可以在編譯時進行檢查,減少了執行時錯誤的可能性。
3、易於擴充套件:透過繼承和組合解析規則,開發者可以輕松地擴充套件已有的解析器,以滿足更復雜的解析需求。
4、易於測試:有助於確保解析器的正確性和穩定性。
03
使用範例
1、安裝依賴
Install-Package Sprache
2、字串驗證
// 引入Sprache庫
using Sprache;
// 定義識別元的解析規則
Parser<string> Identifier =
from leading in Parse.WhiteSpace.Many() // 可以包含前置空格
from first in Parse.Letter.Once() // 第一個字元只能是字母
from rest in Parse.LetterOrDigit.Many() // 剩余的字元可以是字母或數位
from trailing in Parse.WhiteSpace.Many() // 可以包含後置空格
select new string(first.Concat(rest).ToArray()); // first+rest作為識別元
// 編寫一個輔助方法,用於檢查輸入的文本中是否包含合法的識別元
voidCheckIdentifier(string text)
{
var result = Identifier.TryParse(text);
if (result.WasSuccessful)
{
Console.WriteLine($"[{text}]中包含合法的識別元.識別元為: {result.Value}");
}
else
{
Console.WriteLine($"[{text}]中不包含合法的識別元.");
}
}
// 測試解析效果
CheckIdentifier("a123");
CheckIdentifier("1abc");
效果:
04
計畫地址
https://github.com/sprache/Sprache
- End -
分享一套.NetCore從入門到精通視訊教程
點選下方公眾號卡片,關註我
回復「 888 」,免費領取
覺得好看 點個在看👇