บทความ:
Perl
PHP
HTML
CSS
XML
DTD
XSD
RSS
WSDL
Linux
Site Map
Board
Connect Us: facebooktwitter

Subexpression

นนทชัย ทรัพย์ทวีพงศ์ 2009-08-02 19:38:00  ให้คะแนนบทความนี้(0)  ลดคะแนนบทความ(0)  จำนวน Comment(0)  จำนวนคนอ่าน(510)  

บทความก่อนนี้ กระผมได้กล่าวถึงวิธีการใช้ Expression ซึ่งสามารถนำไปเป็นรูปแบบในการค้นหาได้ ไม่ว่าจะเป็นการค้นหาคำ ตัวเลข หรืออะไรก็ตามที่เราต้องการ แต่ในบทนี้เป็นเรื่องเกี่ยวเนื่องกับ Expression นั่นคือ Subexpression คือการใส่ Expression เพื่อทำการค้นหาหลายเงื่อนไขโดยที่แต่ละคำที่ใช้ในการค้นหาต้องถูกคั่นด้วยสัญลักษณ์ | (pipe) เรามาลองดูวิธีการใช้งานกันดีกว่าครับ

ผู้อ่านอาจจะไม่เข้าใจสักเท่าไร ดังนั้นเรามาดูตัวอย่างแรกกันเลยดีกว่าครับ เป็นการค้นหาคำหลาย ๆ คำในตัวแปรอะเรย์

@email_lines = ("Dear idiot:",
                        "I hate you, you twit. You're dope",
                        "I bet you mistreat your llama.",
                        "signed, Doug.");
for $check_line(@email_lines) {
     if ($check_line =~ /idiot|dope|twit|llama/) {
          print "Be careful This line might contain something offensive:\n",
          $check_line, "\n";
     }
}
# หมายความว่าในแต่ละสมาชิกแต่ละตัวของ @email_lines 
# จะต้องมีคำว่า idiot หรือ dope หรือ twit หรือ llama ก็ได้

เราสามารถบอกคำที่เราค้นหาเจอได้ โดยต้องใส่ regular expression เหล่านี้ไว้ภายใน () โดยเมื่อ String นั้น ๆ match กับคำไหนใน regular expression คำนั้น ๆ จะถูกเก็บไว้ในตัวแปร $1, $2, ...

for $check_line(@email_line) {
     if ($check_line =~ /idiot|dope|twit|llama/) {
          print "Be careful this line contains the offensive word $1:\n",
                    $check_line, "\n";
     }
}

ถ้า regular expression มีมากกว่า 1 subexpression ผลที่ได้จะเก็บไว้ในตัวแปร $1, $2, $3, ...

$name = "Wall, Larry";
$name = /(\w+), (\w+)/; # $1 = Wall, $2 = Larry

สามารถใช้ subexpression ซ้อนกันได้ โดยนัยสำคัญจะเรียงจากซ้ายไปขวา

$string = "The time is 12:25:30 and I'm hungry.";
$string = /((\d{1,2}):(\d{2}):(\d{2}))/;
@time = ($1, $2, $3, $4);
# ** วงเล็บนอกสุดจะเก็บไว้ในตัวแปร $1
# ** จากนั้นวงเล็บต่อ ๆ มาก็จะเก็บไว้ใน $2, $3, $4
# @time = ("12:25:30", "12", "25", "30")

นอกจากจะเก็บเป็นตัวแปรอะเรย์แล้วยังสามารถเก็บเป็นตัวแปรธรรมดาได้ เช่น

($time, $hour, $minute, $second) = ($1, $2, $3, $4);
# หรือจะเขียนแบบย่อ ๆ ได้ดังนี้
($time, $hour, $minute, $second) =~ /((\d{1,2}):(\d{2}):(\d{2}))/;
แหล่งที่มา:

Related Article

Related Download

ไม่มีรายการดาวน์โหลด


Login  Login
ค้นหา  Search