วันนี้เป็นโจทย์ง่ายๆจาก CodeSignal ครับ ให้หาตัวเลขชุดแรกใน string ครับ
![](https://kreangkrai.com/wp-content/uploads/2021/07/image-10.png)
วิธีที่ผมใช้ก็คือ 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
![](https://kreangkrai.com/wp-content/uploads/2021/07/image-11.png)
ยิ่งอ่านก็ยิ่งลึกขึ้น เอาเป็นว่ามาดูดีกว่า 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 ได้สบายๆ