ใครใช้ regular expression เชิญหน่อยจร้า

พอดีผมต้องการตรวจสอบหา symbol=? และต้องมีคำ companyholder.do ตามเว็บที่เขียนไว้ ชึ่งผมลองทำ symbol=\w* แต่มันก็เก็บไม่หมด เช่น RML-F ได้แค่  symbol=RML มีใครพอทำได้บ่างครับ
https://regexr.com/3n9qg

ตัวอย่าง
https://www.set.or.th/set/companyholder.do?symbol=EMC
https://www.set.or.th/set/companyholder.do?symbol=EMC&language=th&country=TH
https://www.set.or.th/set/companyholder.do%3Bjsessionid=B08A576398DF62A466D1D08EAAF280CC?symbol=BLAND-F&language=en&country=EN
https://www.set.or.th/set/newsdetails.do?newsId=14828768298911&language=th&country=TH
https://www.set.or.th/set/companyholder.do?symbol=RML-F&ssoPageId=6&language=th&country=TH
คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 2
ถ้า symbol มี ตัวหนังสือ  ตัวเลข  และ ลบ
ไม่จำเป็นต้องเป็นหน้าผู้ถือหุ้น

(?<=symbol\=)[\w\d-]+(?=&|\n)

Match 1
Full match    50-53    `EMC`
Match 2
Full match    104-107    `EMC`
Match 3
Full match    227-234    `BLAND-F`
Match 4
Full match    394-399    `RML-F`

regex101.com/r/szUJpx

Look ahead & look behind
https://www.regular-expressions.info/lookaround.html



ถ้าจะเอาหน้าผู้ถือหุ้นด้วย

companyholder\.do[\S]+symbol\=([\w\d-]+(?=&|\n))

แต่ต้องจับเป็น Group 1 แทน Full match
เพราะ look behind ไม่ให้มี quantifier

Match 1
Full match    26-53    `companyholder.do?symbol=EMC`
Group 1.    50-53    `EMC`
Match 2
Full match    80-107    `companyholder.do?symbol=EMC`
Group 1.    104-107    `EMC`
Match 3
Full match    157-234    `companyholder.do%3Bjsessionid=B08A576398DF62A466D1D08EAAF280CC?symbol=BLAND-F`
Group 1.    227-234    `BLAND-F`
Match 4
Full match    370-399    `companyholder.do?symbol=RML-F`
Group 1.    394-399    `RML-F`

regex101.com/r/qd2SEo
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่