rulex:Rust一種新的正規表示式語言
普通的正則函式是非常簡潔的,但當它們變長時,它們就變得越來越難理解。
預設情況下,它們沒有註釋,而空白是重要的。
然後是大量的符號和反斜槓轉義,不遵循任何可識別的系統。(?<=) (?P<>) .?? \N \p{} \k<> \g'' 等等。
而且,在不同的regex實現之間存在各種不一致,這是造成混亂的完美秘訣。
Rulex用一種新的、更簡單的語法解決了這些問題。
- 它對空格不敏感,並允許註釋
- 文字必須出現在引號中。這使得表示式更長,但也更容易閱讀。
- 沒有反斜槓轉義
- 非捕獲組是預設的
- 語法更一致
Rulex目前與PCRE、JavaScript、Java、.NET、Python、Ruby和Rust相容。在編譯過程中,必須要指定搜尋結果,所以rulex可以確保產生的搜尋結果在目標搜尋結果引擎上能正常工作。
對JavaScript使用者的重要提示。不要忘記啟用u標誌。這是支援Unicode的必要條件。所有其他主要的 regex 引擎預設都支援 Unicode。
案例:
# String 'hello world' # hello world # Lazy repetition 'hello'{1,5} # (?:hello){1,5}? 'hello'* # (?:hello)*? 'hello'+ # (?:hello)+? # Greedy repetition 'hello'{1,5} greedy # (?:hello){1,5} 'hello'* greedy # (?:hello)* 'hello'+ greedy # (?:hello)+ # Alternation 'hello' | 'world' # hello|world # Character classes <p class="indent">['aeiou'] # [aeiou] <p class="indent">['p'-'s'] # [p-s] |
它不受任何正規表示式庫的支援。您只需指定正規表示式風格(例如Rust,如果您使用的是 Rust 正規表示式箱),它會輸出一個正規表示式,然後您可以將其傳遞給任何正規表示式引擎:
let my_regex = regex::Regex::new( rulex::Rulex::compile( r#"['tT'] 'est' '!'+"#, rulex::options::CompileOptions { flavor: rulex::options::RegexFlavor::Rust, ..Default::default() }, ).unwrap(), ).unwrap(); |
但是如果在編譯時知道正規表示式,推薦使用 rulex-macro crate,它更方便,不新增執行時依賴,甚至在編譯時顯示診斷:
let my_regex = regex::Regex::new( rulex!(r#"['tT'] 'est' '!'+"#), ) .unwrap(); |
相關文章
- 正規表示式及多語言操作指南
- 正規表示式語法
- 正規表示式的基本語法
- 如何設計一門語言(十)——正規表示式與領域特定語言(DSL)
- 正規表示式-語法大全
- 正規表示式語法大全
- 正規表示式語法(轉)
- 正規表示式語法介紹
- 正規表示式教程——語法篇
- JAVA正規表示式語法大全Java
- SQL語句與正規表示式SQL
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 通過js正規表示式例項學習正規表示式基本語法JS
- Java正規表示式的語法與示例Java
- OC 正規表示式的語法及使用
- 正規表示式案例分析 (一)
- 正規表示式筆記(一)筆記
- 正規表示式基礎一
- 正規表示式
- java 正規表示式語法學習Java
- 正規表示式的多種實用總結
- JavaScript的正規表示式JavaScript
- JS 的正規表示式JS
- 現代 ABAP 程式語言中的正規表示式
- JS常用正規表示式及驗證時間的正規表示式JS
- C++ 11 新特性之正規表示式C++
- (一) 爬蟲教程 |正規表示式爬蟲
- Javascript正規表示式詳解(一)JavaScript
- 【JavaScript】正規表示式JavaScript
- php –正規表示式PHP
- 正規表示式 教程
- 正規表示式 split()
- java正規表示式Java
- PHP正規表示式PHP
- javascript正規表示式JavaScript
- 【java】正規表示式Java
- 初探正規表示式
- [js]正規表示式JS