iT邦幫忙

2022 iThome 鐵人賽

DAY 18
0
自我挑戰組

寫程式帶給我的無形快樂系列 第 18

吃下 Regular Expressions 翻譯年糕 (量詞)

  • 分享至 

  • xImage
  •  

前一篇已經知道如何去匹配單一字元後,接下來處理怎麼匹配字串中多個字元

次數 {n}

如果想要字元出現 n 次,可以使用大括號包住,用 {n}表示
例如: \d{5} 等同於 \d\d\d\d\d,表示要出現五次數字

次數也可以使用範圍 {min, max}
例如: \d{3,5} 代表要出現三~五次數字

也可以省略上限值 {3,}


簡寫

簡寫 說明
+ 出現 1 次以上,等同於 {1,}
? 出現 0~1 次 (最多 1 次),等同於 {0,1}
* 出現 0 次以上 (可有可無),等同於 {0,}

群組

* 或是 + 這些量詞可以使用在一組多個字元上

例如: /boo+(hoo+)+/

第一個 + 和 第二個 + 的量詞是指 boo 和 hoo 中的第二個 o
第三個 + 指的是 (hoo+) 這個群組

所以白話解釋 /boo+(hoo+)+/

--> 找到 bo --> 且 bo 後面至少要出現 1 個 o 
--> 無論是 boo 或 boooooooo,後面至少要接一組 (hoo+) 
--> 這組 hoo+ 裡面內容要是 ho 開頭,且 ho 後面至少要出現 1 個 o --> hoo, hoooo 都可以

測試結果
bohoo boooohohoo boho ---> 不符合
boohoo booooohoo boohoohooohoooo --> 符合


應用

一段 <span> 標籤的內容,只要留下 tag 中的文字
例如:

<span style="color:red"> 我是文字 </span>
<span class="item"> 我是文字 </span>

// 需要只留下 --> 我是文字我是文字

可以先寫出規則,好有個方向下手

  1. <span> </span> 都要被移除
  2. <span> 中可能會有很多屬性,也都要移除

我可能會這樣寫 /<\/?span[^>]*>/

Regex 說明
< 標籤開頭符號 <
\/?span / 結尾標籤的斜線可有可無,代表 span /span 都符合
[^>]* span 文字的後方可以接除了> 的所有字元,這個字元出現幾次都可以
> 標籤結束符號 >
<span style="color:red"> 我是文字</span>
<span class="item">我是文字</span>
<span>我是文字</span>

測試以上的 HTML,都可以擷取內容文字出來!


上一篇
吃下 Regular Expressions 翻譯年糕 (字元類別)
下一篇
[雜談] 取名定程式碼的一生
系列文
寫程式帶給我的無形快樂30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言