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(); |
相關文章
- 正規表示式及多語言操作指南
- 正規表示式的基本語法
- 正規表示式(一)
- 正規表示式-語法大全
- 正規表示式-問號的四種用法
- 正規表示式最常用的幾種情形
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- 通過js正規表示式例項學習正規表示式基本語法JS
- Java正規表示式的語法與示例Java
- 正規表示式的一些規則
- 正規表示式
- 正規表示式.
- 匹配迅雷種子連結的正規表示式
- java 正規表示式語法學習Java
- OC: 手機號正規表示式(新)
- 現代 ABAP 程式語言中的正規表示式
- Linux 的正規表示式Linux
- ES9的新特性:正規表示式RegExp
- JS常用正規表示式及驗證時間的正規表示式JS
- (一) 爬蟲教程 |正規表示式爬蟲
- js正規表示式基本語法學習JS
- Python語法進階(2)- 正規表示式Python
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()
- 初探正規表示式
- 正規表示式 test()
- 正規表示式(?!)作用
- 正規表示式 {n,}
- SQL正規表示式SQL
- 正規表示式(java)Java
- Python——正規表示式Python
- PHP正規表示式PHP
- 正規表示式概括
- javascript正規表示式JavaScript
- java正規表示式Java