วันนี้เป็นโจทย์ง่ายๆจาก 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
ยิ่งอ่านก็ยิ่งลึกขึ้น เอาเป็นว่ามาดูดีกว่า regex golang มีอะไรให้ใช้บ้าง
regex golang เท่าที่ผมดู method มี return 2 แบบ
- return bool
- return data ที่ matching มีทั้งแบบ single และแบบ array
ลักษณะ action
- มีทั้งแบบ template คล้ายๆ html template ใน go เลย
- Find มีทั้งแบบ index, normal string และ find regex ซ้อน regex (จะยากไปไหนนนน)
- Split
- Replace
ถ้าดูแบบนี้ ผมว่าจัดการพวก string ได้ดีมากๆครับ
สิ่งที่ยากคือ การเขียน regex ครับ ถ้าเขียนเป็น เขียนเก่งๆนี่ดีมากเลยนะครับ ใช้กับพวก awk, grep ได้สบายๆ