作者LPH66 (-6.2598534e+18f)
看板RegExp
標題Re: [問題] regular 在java unix 為什麼不一樣?
時間Fri Sep 25 18:22:38 2015
※ 引述《pttnews (PTT新聞)》之銘言:
: 在java 我用 http://java-regex-tester.appspot.com/ 測試
: 在unix 我用 vim 測試
: 最近小弟在學習regular , regular 實屬強大不得不學
: 有很多問題
: 例如:
: [a-b[c-d]] 我想要找a-b and c-d
: 在vim 沒辦法找到 /[a-b[c-d]
: 在java 則可以
: 請問各位高手, 這兩者為何不一?
: 找到答案,
: Unix 要加上\
: [a-b\[c-d\]]
你一定哪裡搞錯了
[a-b\[c-d\]] 是「a 到 b、或 [、或 c 到 d、或 ]」
這怎麼看都不是「a-b and c-d」...
再說你這句「a-b and c-d」也語焉不詳,究竟你想找的是什麼東西 @@
----
然後回到 [a-b[c-d]],它是 [a-b[c-d] 跟著 ]
前一個是「a 到 b、或 [、或 c 到 d」
[] 的規則是平常時候只有 [ 為特殊字,] 不是;
碰到 [ 之後變成 ] 為特殊字,[ 不是
然後這兩個特殊字中間再去套字元類別的規則
也就是 [] 是沒有巢狀結構的,[ 會配上它後面第一個看到的 ] 把中間一把抓
原式找不到東西的原因多半就是因為這樣而留在外面的最後一個 ] 吧
在外面 ] 不是特殊字所以它就要求對上一個 ] 字
--
LPH [acronym]
= Let Program Heal us
-- New Uncyclopedian Dictionary, Minmei Publishing Co.
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.30.49
※ 文章網址: https://www.ptt.cc/bbs/RegExp/M.1443176561.A.4C5.html
推 pttnews: 謝謝L大, 我想要測試 交集 跟 聯集 09/25 21:00
→ pttnews: 按照他上面的說明 [a-d[m-p]]聯集 [a-z&&[def]]交集 09/25 21:02
→ pttnews: 事實上, 好像如你所說[]被當成字元看待 09/25 21:04
→ pttnews: 請問是不是他說錯了 09/25 21:04
→ LPH66: 應該是他弄錯了...常見的 regexp 的 character class 09/25 21:41
→ LPH66: 直接寫一起就是聯集, 如 [a-dm-p] 09/25 21:41
→ LPH66: 交集的話我不太確定, 似乎有 google 到好像部份的 regexp 09/25 21:43
→ LPH66: 支援他講的 && 語法的樣子 09/25 21:43
→ LPH66: 啊, 找到文件了: 他講的那種交集聯集語法 java 有支援 09/25 21:47
→ LPH66: 所以你在那個網站上面測試會如你所預期 09/25 21:47
→ LPH66: 但那種語法一般的 PCRE regexp 是不支援的 09/25 21:49
→ LPH66: 所以 vim 才試不出來 09/25 21:49
推 pttnews: 謝謝L大 09/25 22:08
→ pttnews: 好像.NET也有一些奇怪的語法 09/25 22:09
→ pttnews: 先不管~現有這些夠用了 09/25 22:10