November 17, 2011

misc: นิพจน์ปรกติ (เรกูลาร์เอ็กเพรสชัน)

นิพจน์ปรกติ (regular expression นิยมย่อว่า regex) คือ pattern matching สำหรับข้อความชนิดหนึ่ง เรามักเจอการมันโดยทั่วไปเวลาทำงานเกี่ยวกับการ search/replace ข้อความ

กฏโดยทั่วไปของมันคือ (ในที่นี้สนเฉพาะภาษาอังกฤษก่อนนะ)

Pattern
Sample Pattern
Match Where
อธิบาย
alphanumeric
hell
hell, hello, neohellenic
เลือกคำนั้นไม่ว่าจะปรากฏที่ไหนในข้อความก็ตาม
42
42, 1342, 86420
.
hi.
him, hire, this, hi5, hi.
แทน . ด้วยอะไรก็ได้ (ยกเว้น \r, \n)
^
^hell
hell, hello ted
ขึ้นต้น/ลงท้ายบรรทัดนี้ด้วย (ตามลำดับ)
$
hell$
go hell, shell
|
ha|is
has, his, this
เลือกอันไหนก็ได้ระหว่าง | มา 1 ตัว
(some)
h(ea|il)l
hill, heal
ไว้ใช้จัดกลุ่มของคำเพื่อให้เลือก/ทำซ้ำได้ง่ายขึ้น
[some]
h[aeiou]l
hal9000, hell, alcohol
เลือกอันไหนก็ได้ใน [...]
h[a-z]l
shall, hcl, hyline
เลือกอักษรตัวไหนก็ได้ใน [...] ตั้งแต่ตัวแรกถึงตัวสุดท้าย (เรียงตามลำดับด้วย ASCII)
h[a-]l
hall, h-l
เมื่อเอา - ไว้สุดท้าย คือเลือกเครื่องหมาย - ด้วย
[^some]
h[^abc]l
hell, alcohol
เลือกอันไหนก็ได้ ที่ไม่อยู่ใน [...]
?
hello?
hell, hello
มีหรือไม่มีตัวก่อนหน้า ? ก็ได้
(toget)?her
together, her
+
hel+
hel, hell, helll
มีตัวก่อนหน้า + อย่างน้อย 1 ตัว
*
s*he
he, she, sshe
มีตัวก่อนหน้า * อย่างน้อย 0 ตัว (คือมีหรือไม่มีก็ได้ คล้ายๆ ? แต่อันนั้นจำกัดมีแค่ตัวเดียว)
{n,m}
hel{2}
hell
มีตัวที่เลือกจำนวนเท่านั้นพอดี แต่ถ้าเว้นตัวใดตัวหนึ่งไว้ หมายถึงขอบเขตด้านนั้นเป็นเท่าไหร่ก็ได้
hi{2,3}
hihi, hihihi
e{2,}
ee, eee, eeee
ok{,2}
ok, ok, okk
\
hi\.
hi.
escape char สำหรับยกเลิกความหมายอักขระพิเศษครั้งละตัว
"some"
"where?"
where?
ยกเลิกความหมายของอักขระพิเศษทั้งประโยค

หมายเหตุว่าจะเอาไปใช้ที่ใด ก็ลองดูกฏย่อยๆ ประจำที่อีกทีนึงนะครับ

2 comments:

  1. เว็บนี้เอาไว้ทดสอบนิพจน์ปรกติของลายมือชาวชวาแต่คิดว่าภาษาอื่นก็ได้จะใช้ได้ครับ ^^"

    ReplyDelete