本文所有內容對編譯原理有一定基礎者沒有任何意義!
而所謂的單元是我假想的乙個()括起來的乙個整體單位,你可以理解成運算子的優先順序,其實就是這個意思,只是這個概念被弱化了。
很多情況下,我們都忽略了一些細節的知識點,今天冷靜下來分析乙個正則問題的時候,找到了乙個小bug
(?!對環視有點基礎的一定能看出來這在幹什麼,也很容易看出來錯誤在什麼地方。
(?:(?!這說明了乙個小的單元概念,即 [元字元或普通字元] 加上 [量詞] 組成乙個單元。也就是說第乙個正則中,這個環視作用範圍是 .* 而非 .
正規表示式中的範圍問題一直都是學習正則和理解(看)正則的乙個問題,這對初學者來說必然有所感觸。
比如,^a|b$
這樣的正則簡單是說被|一次性劃開了,因此這個正則的含義是 ^a b$ 而非 ^ a|b $這樣的結構。你可以想象成( (^a) | (b$) )
這裡的小括號是我用來解釋的假象單元
這樣的單元還有如下情況下
[abcd]|[abcd][abcd]|[abcd]
與([abcd]|[abcd])([abcd]|[abcd])
明顯就有不同的意思
這個很容易理解,為什麼呢,因為我用括號括起來了。但是前面2個情況卻沒有
第乙個情況是, [元字元或普通字元] 加上 [量詞]
第二個情況是,整個正規表示式就是乙個單元,在這個大的單元裡 | 的作用域是所謂「全域性作用域」
在這裡提醒一點,環視的作用範圍是下個正則單元,而不是字元單元。即我一開始丟擲的問題
那麼(?!)(<[^>]*>)+的環視作用域在哪呢,或者是正則單元是哪個呢。
看下面的例題
string str = "";
regex reg = new regex("(?!)(<[^>]*>)+");
console.writeline(reg.match(str));
output:
現在你明白了正則單元是什麼了對吧。好吧,再加上一條 [正則單元] + 量詞 還是乙個正則單元
我的基礎能力我很清楚,所以用編譯原理來解釋十分吃力,雖然自己能夠理順,但是真的不敢寫出來,很期待 過客 續寫這麼一篇。他的部落格和正則看起來都是那麼的舒服。絕不拍馬溜須,大家都懂的
sql正規表示式 SQL中的正規表示式
sql正規表示式 sql中的正規表示式 sql的查詢語句中,有時會需要引進正規表示式為其複雜搜尋指定模式。下面給出一些 regexp 在mysql 語句中應用 非全部 1 匹配字串的開始部分。mysql select fo nfo regexp fo 0mysql select fofo regex...
正規表示式 正規表示式 總結
非負整數 d 正整數 0 9 1 9 0 9 非正整數 d 0 負整數 0 9 1 9 0 9 整數 d 非負浮點數 d d 正浮點數 0 9 0 9 1 9 0 9 0 9 1 9 0 9 0 9 0 9 1 9 0 9 非正浮點數 d d 0 0 負浮點數 正浮點數正則式 英文本串 a za z...
正規表示式 表示式
網域名稱 a za z0 9 a za z0 9 a za z0 9 a za z0 9 interneturl a za z s 或 http w w w 手機號碼 13 0 9 14 5 7 15 0 1 2 3 5 6 7 8 9 18 0 1 2 3 5 6 7 8 9 d 號碼 x x x...