Tag Archives | regular expression

ตัด String ด้วย Regular expression ในจาวา

เล่าเรื่องงานอีกหละ ฮะๆๆ วันนี้มีสิ่งที่ต้องทำอยู่หนึ่งอย่าง(หลังจากอัดทำไปในสองวันแรก วันหลังๆ เลยรู้สึกน้อยเลย -_-”) คือหาทางกรองข้อมูล คราวนี้ข้อมูลที่มามันเป็นอย่างนี้ xxxhello55xxxx garbage garbage xxxx xworld6xxx garbage garbage xxxx xxxxxxbaa7777xxxx garbage garbage xxxx แล้วสิ่งที่ต้องการคือคำที่อยู่ระหว่าง x ช่องแรกสุด (hello, world, baa) วิธีการง่ายๆ ถ้าไม่ใช้ expression ก็คือหาทางตัดเอา x ด้านหน้ากับ x ด้านหลังและข้อความที่เหลือทิ้งไปให้หมด แต่มันช่างเปลืองแรงยังไงไม่รู้ทั้งๆ ที่จาวามันก็มี expression ที่สามารถตัดเอาคำที่ตรงตามรูปแบบที่ต้องการมาให้เลยได้อยู่แล้ว ทำไมเราต้องไปหาทางตัดมันเองด้วย ก็เลยลองขุดๆ ดูแล้วก็พบวิธีทำตามด้านล่าง for (String data:datas) { Matcher m = Pattern.compile(“[a-z]+\\d+”).matcher(data); m.find(); System.out.println(m.group()); } เห้ย อะไรมันจะยุ่งยากงี้ฟะ ทำไมมันต้องทำหลายขั้นตอนงี้ด้วย [...]

Read full story Comments { 0 }

Flex RegExpValidator

ตอนแรกว่าจะทำ custom validator เองซะแล้วแต่พี่บอกว่าใช้ตัวนี้ได้ก็เลยนั่งงม regular expression ใหม่ จากของเดิมสมัยจาวาเวลาจะ validate string อะไรก็ตามจะใช้ [\p{L}\p{M}]+ เพื่อตรวจสอบว่าข้อมูลที่ใส่เข้ามานั้นเป็นตัวอักษรหรือป่าว แต่ Flex ดันไม่มีกลุ่ม unicode validator ให้ซะงั้น เลยต้องเลี่ยงด้วยวิธีอื่น แต่แล้วก็ต้องปวดหัวอีกเพราะว่าใส่แค่ [^\W]+ มันดันไม่พอ เพราะมันไม่ได้ validate ทั้งข้อความให้แต่จะแบ่งเป็นช่วงๆ ถ้ามีช่วงไหนถูกตาม pattern ก็ถือว่าถูกทั้งประโยค พี่ก็บอกว่าใน regular expression มีสัญลักษณ์อีกสองตัวที่เข้ามาช่วยคือ ^ กับ $ ใส่ไว้หน้ากับหลังรูปแบบจะเป็นการบอกว่าให้ตรวจทั้งประโยคว่าตรงตาม pattern หรือไม่ผลสุดท้ายก็เลยได้เป็น ^[^\W]+$ ดูแปลกๆ ไม่ค่อยคุ้นตาเพราะคงไม่ค่อยมีใครใช้ ^$ กันซักเท่าไหร่หรอก จากด้านบนผลที่ได้ก็เกือบเทียบเท่า [\p{L}\p{M}]+ หละคือตัดเอาเครื่องหมายประหลาดๆ ออกทั้งหมดเหลือแต่ตัวอักษร ตัวเลขและก็ ‘_’ เหมาะสำหรับเอาไว้ตั้งชื่อต่างๆ ยิ่งนัก แล้วก็ ไม่ต้องสร้าง custom [...]

Read full story Comments { 0 }

Regular expression กับภาษาไทย

วันศุกร์กำลังนั่งทำงานอยู่ แล้วก็คิดไปคิดมาว่าสิ่งที่ต้องทำคือการตรวจสอบว่า ข้อความที่ส่งเข้ามานี่มีตัวอักษรประหลาดพวก *^#$… อะไรพวกนี้อยู่หรือป่าว ปกติก็ลองกับภาษาอังกฤษธรรมดา เวลาใช้ regular expression ตรวจก็จะมีรูปแบบประมาณว่า \w ซึ่งเหมือนกันทุกภาษา แต่พอใช้ภาษาไทยปรากฏว่ามันตรวจสอบโดยใช้รูปแบบด้านบนไม่ได้นี่สิ เลยต้องขุดเพิ่มเติมนิดหน่อยแล้วก็เจอตัวนี้เข้า \p{…} รูปแบบนี้เป็นตัวบอกว่าจะใช้กลุ่มรูปแบบที่เกี่ยวกับ unicode นะ คราวนี้ถ้าต้องการตรวจสอบภาษาไทยก็ใส่เป็น \p{L} แต่ปัญหามันไม่จบแค่นั้น ถ้าใส่แค่ L มันจะเอาเฉพาะที่เป็นพยัญชนะ พวก สระ และ วรรณยุกต์ ถ้าเจอมันจะบอกว่าผิดรูปแบบทันที แต่คำภาษาไทยมันรวมพวกนั้นเข้าไปด้วยหนะสิ ก็เลยต้องแก้รูปแบบอีกทีเป็น [\p{L}\p{M}] โดย M ที่ใส่มาก็เพื่อบอกว่าเอา สระ และ วรรณยุกต์ด้วยนั่นเอง สำหรับรายละเอียดเพิ่มเติมอ่านได้จากเว็บนี้ http://unicode.org/unicode/reports/tr18/ จะมีพวกตัวอักษรตัวเล็ก ตัวใหญ่ … อีกมากมายในภาษาอื่นๆ ด้วยลองไปดูเอาละกันครับ นอกเรื่อง: ส่วนนี้พูดถึง serialize ของจาวาหน่อย เพราะวันศุกร์ไปปล่อยความงี่เง่าส่วนตัวใส่เพื่อนแหะๆ ปกติเวลา serialize วัตถุอะไรในจาวาก็จะให้คลาสของ วัตถุนั้น implements [...]

Read full story Comments { 1 }