Golang – Regexp

วันนี้เป็นโจทย์ง่ายๆจาก CodeSignal ครับ ให้หาตัวเลขชุดแรกใน string ครับ

วิธีที่ผมใช้ก็คือ ascii ครับ แต่พอดูเฉลยของคนอื่น ก็ทำให้ร้อง อ๋อววววว
เขาใช้ regexp ก็ได้นี่น่า (ผมก็เคยใช้ตอนทำพวก validate แต่ดันนนนไม่เอามาแก้ข้อนี้)

import "regexp"
func longestDigitsPrefix(inputString string) string {
	re := regexp.MustCompile(`^([0-9]+)`)
	return re.FindString(inputString)
}

Regexp

regexp ของ golang ใช้ syntax เดียวกับ Perl, Python, and other languages นั้นหมายความว่า เราสามารถ migrate บาง service มาใช้ Golang ได้สบายๆ

แต่สิ่งที่ต่างคือ การใช้ algorithm matching

golang ใช้ NFA (แกน Y เวลา, แกน X ตัวอักษร)

ยิ่งอ่านก็ยิ่งลึกขึ้น เอาเป็นว่ามาดูดีกว่า regex golang มีอะไรให้ใช้บ้าง

regex golang เท่าที่ผมดู method มี return 2 แบบ

  1. return bool
  2. return data ที่ matching มีทั้งแบบ single และแบบ array

ลักษณะ action

  1. มีทั้งแบบ template คล้ายๆ html template ใน go เลย
  2. Find มีทั้งแบบ index, normal string และ find regex ซ้อน regex (จะยากไปไหนนนน)
  3. Split
  4. Replace

ถ้าดูแบบนี้ ผมว่าจัดการพวก string ได้ดีมากๆครับ

สิ่งที่ยากคือ การเขียน regex ครับ ถ้าเขียนเป็น เขียนเก่งๆนี่ดีมากเลยนะครับ ใช้กับพวก awk, grep ได้สบายๆ