美文网首页
代碼庫之「 Ruby 的正則表達式」

代碼庫之「 Ruby 的正則表達式」

作者: Pope怯懦懦地 | 来源:发表于2017-11-14 01:19 被阅读24次

1. 怎麼定義正則表達式?

/.../%r{...}就夠了,沒必要用Regexp::new;有時會用到options

  • /pat/i - 忽略大小寫;
  • /pat/m - 多行查找;
  • /pat/o - 可以執行一次#{},這點相當有用,因為模式未必是固定的,比如在請求搜索中;
  • /pat/x - 忽略模式中的空格和註釋,但貌似不能忽略範圍量詞中的空格:
/\d{3,6}/x =~ '123456'  #=> 0
/\d{3, 6}/x =~ '123456'  #=> nil

2. 元字符有哪些?

也就是,哪些字符需要轉義?(, ), [, ], {, }, ., ?, +, *,以上。這點其實很重要,因為在處理 HTML 這類時很容易迷惑「是不是需要轉義」。

3. 怎麼寫出正確的正則表達式?

余晟老師在這篇裏已經講得很清楚了:就是「與或非」。


Tips:

1. 如何匹配全角空格?

\p{Z}就好了,詳見 @余晟 老師這篇裏講到的 Unicode Property 。

2. 高級技巧之「環視」

簡單來說,就是「向前看」(lookahead)和「向後看」(lookbehind)。當然,這裏的「向前」「向後」都是站在字符串的角度,也就是順著閱讀方向(即「從左到右」)為正向。這是相當有用的技巧,比初學者想像的還要有用。

  • (?=pat) - Positive lookahead assertion: 確保前面有東西,而且就是那東西;
  • (?!pat) - Negative lookahead assertion: 確保前面就算有東西,也不是那東西;
  • (?<=pat) - Positive lookbehind assertion: 確保後面有東西,而且就是那東西;
  • (?<!pat) - Negative lookbehind assertion: 確保後面就算有東西,也不會是那東西;

最好的例子就是匹配<p></p>之間具有某個模式的一段話:

pat = '\d+'
'<p>this is a num 123.</p>'.scan(/(?<=<p>).*(#{pat}).*(?=<\/p>)/x)  #=> [["3"]]

總之,大家多看看主文檔吧。

相关文章

  • 代碼庫之「 Ruby 的正則表達式」

    1. 怎麼定義正則表達式? 用/.../或%r{...}就夠了,沒必要用Regexp::new;有時會用到opti...

  • 常用正則表達式

    一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^\d{n}$ 3 至少n位的数字:^\d{n,...

  • [234]北大Java 9.3正則表達式(Regular exp

    9.3.1 基本寫法:匹配符、處理文本、關於字符9.3.2 基本應用:分割RegexSpiliter.java 還...

  • 2019中秋假期

    興達港情人碼頭,紫竹寺

  • Java中正则表达式不包含某个字符行的写法

    在Java文本字符串分析時,有時需要對不包含某個字符或文字列進行分析 可以用下列的正則表達 Pattern p =...

  • 《達·芬奇密碼》

    懸疑類的書一直都是我鐘愛的,而這本《達·芬奇密碼》不僅僅是一本單純的偵探小說,解謎、謀殺、偵探、逃亡等等,還包含著...

  • Java HelloWorld 學習

    代碼: 編譯: Main.class 字節碼: Debug 代碼執行 output: javac的命令說明: 執行...

  • Globals in Polymer

    作者:王納米 責任編輯:《代碼指南》編輯部 首發於《代碼指南》(daimazhinan.com) 《代碼指南》編輯...

  • 低代碼/無代碼的今生

    低代碼/無代碼的今生在2014年由Gartner定義。2018年,隨著Outsystems獲得KKR和高盛的3.6...

  • 2019年1月7日

    早課抄了奥地利詩人里尔克的詩歌《爲我祝賀(節選)》。里尔克追求的是通过自我超越而達到對自己的回歸,這首詩表達的則是...

网友评论

      本文标题:代碼庫之「 Ruby 的正則表達式」

      本文链接:https://www.haomeiwen.com/subject/glztvxtx.html