將錯就錯?正規表示式 [,-.]
正規表示式 [,-.]其目的很清楚:匹配兩組由逗號、破折號或句號分隔的兩個數字。
當然,它不應該起作用。
字元類中的破折號很特別,因為它們用於範圍(如[a-z]用於匹配小寫ASCII字母)。
如果你想在一個字元類中使用"-",你應該把它放在開頭或結尾,而不是放在中間。所以這應該是[-,.]而不是[,-.]。
我以為[,-.]是個錯字,它不會與-相匹配,但我找不到一個錯誤。事實上,它工作得很好,你可以自己試試。
$ perl -E 'say "ok" if "12-34" =~ /\d{2}[,-.]\d{2}/' ok |
發生了什麼事?
逗號、破折號和句號在ASCII中是緊挨著的。
因此,抓取從,到.的所有字元也包括-,而不包括其他。[,-.]是唯一可能的字元類,中間有一個-,只匹配-。
只適合匹配字元類的開頭或結尾的。
另外一種解釋:因為破折號將其變成範圍運算子(如 0-9),而破折號位於 ASCII 表中的逗號和點之間。
這是一場巧合避免的災難。那好美麗。
相關文章
- 正規表示式
- 正規表示式.
- 【正規表示式】常用的正規表示式(數字,漢字,字串,金額等的正規表示式)字串
- python就業班----正規表示式及re應用Python就業
- 常用正規表示式
- JavaScript 正規表示式JavaScript
- MySQL正規表示式MySql
- 正規表示式(java)Java
- SQL正規表示式SQL
- python正規表示式Python
- 正規表示式合集
- 正規表示式(一)
- Python 正規表示式Python
- Python——正規表示式Python
- PHP正規表示式PHP
- 正規表示式概括
- javascript正規表示式JavaScript
- java正規表示式Java
- Shell正規表示式
- 正規表示式 教程
- 正規表示式 【四】
- 正規表示式匹配
- Python:正規表示式Python
- php –正規表示式PHP
- 【Linux】正規表示式Linux
- 【JavaScript】正規表示式JavaScript
- URL正規表示式
- 正規表示式 split()
- 初探正規表示式
- 正規表示式 test()
- 正規表示式(?!)作用
- 正規表示式 {n,}
- 【java】正規表示式Java
- 正規表示式基本規則
- “正規表示式”應當稱為“規則表示式”
- 正規表示式同時匹配中英文及常用正規表示式
- JS常用正規表示式及驗證時間的正規表示式JS
- 搞懂Python正規表示式,這一篇就夠了Python