<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQuery, Ajax, PHP, JSON, XML, Web Technologies &#187; Positive Look Ahead</title>
	<atom:link href="http://blog.chonla.com/tag/positive-look-ahead/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.chonla.com</link>
	<description>คุยกันเรื่อง jQuery, Ajax, PHP, JSON, XML และ Web Technologies เป็นภาษาไทยกันดีกว่า</description>
	<lastBuildDate>Tue, 17 Jan 2012 18:27:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Regular Expression : ไม่เริ่มต้นด้วย&#8230; เขียนยังไงเนี่ย</title>
		<link>http://blog.chonla.com/2010/06/regular-expression-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%a3%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%95%e0%b9%89%e0%b8%99%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2/</link>
		<comments>http://blog.chonla.com/2010/06/regular-expression-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%a3%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%95%e0%b9%89%e0%b8%99%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 21:13:05 +0000</pubDate>
		<dc:creator>chonla</dc:creator>
				<category><![CDATA[Regular Expression]]></category>
		<category><![CDATA[Negative Look Ahead]]></category>
		<category><![CDATA[Negative Look Behind]]></category>
		<category><![CDATA[Positive Look Ahead]]></category>
		<category><![CDATA[Positive Look Behind]]></category>
		<category><![CDATA[Zero-Width Assertion]]></category>

		<guid isPermaLink="false">http://blog.chonla.com/?p=290</guid>
		<description><![CDATA[ใน Regular Expression วิธีการเขียน pattern ให้ตรวจสอบว่า จะต้องขึ้นต้นด้วยตัวเลขเท่านั้น หรือจะต้องขึ้นต้นด้วยตัวอักษรภาษาอังกฤษเท่านั้น ทำได้ง่าย ๆ โดยการเติมสัญลักษณ์ ^ เข้าไปด้านหน้า ทีนี้ เราอยากเปลี่ยน pattern ให้ตรวจสอบเป็น ห้ามขึ้นด้วยตัวเลขนะ หรือห้ามขึ้นด้วยตัวอักษรภาษาอังกฤษนะ จะทำยังไงดีล่ะ&#8230; มาดูกัน วิธีง่าย ๆ ที่มานำเสนอก็คือ การใช้สิ่งที่เรียกว่า Zero-width negative look ahead assertion ครับ แค่ชื่อก็ปวดหัวตึ้บ&#8230; เดี๋ยวก่อนครับ วิธีการใช้งานมันง่ายกว่าชื่อของมันครับ เพียงแค่เราใส่ ^(?! และ ) ครอบสิ่งที่เราไม่ต้องการให้ขึ้นต้น เท่านั้นเป็นอันจบครับ ยกตัวอย่างเช่น เราไม่ต้องการให้ขึ้นต้นด้วย abc แต่หลังจากนั้นจะเป็นอะไรก็ได้ เราก็ใช้ pattern เป็น ^(?!abc)\w+ ครับ ทีนี้ คำที่ขึ้นต้นด้วย abc ทั้งหมด จะ fail [...]]]></description>
			<content:encoded><![CDATA[<p>ใน Regular Expression วิธีการเขียน pattern ให้ตรวจสอบว่า จะต้องขึ้นต้นด้วยตัวเลขเท่านั้น หรือจะต้องขึ้นต้นด้วยตัวอักษรภาษาอังกฤษเท่านั้น ทำได้ง่าย ๆ โดยการเติมสัญลักษณ์ ^ เข้าไปด้านหน้า ทีนี้ เราอยากเปลี่ยน pattern ให้ตรวจสอบเป็น ห้ามขึ้นด้วยตัวเลขนะ หรือห้ามขึ้นด้วยตัวอักษรภาษาอังกฤษนะ จะทำยังไงดีล่ะ&#8230;</p>
<p>มาดูกัน <img src='http://blog.chonla.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<span id="more-290"></span>วิธีง่าย ๆ ที่มานำเสนอก็คือ การใช้สิ่งที่เรียกว่า Zero-width negative look ahead assertion ครับ แค่ชื่อก็ปวดหัวตึ้บ&#8230; เดี๋ยวก่อนครับ วิธีการใช้งานมันง่ายกว่าชื่อของมันครับ เพียงแค่เราใส่ ^(?! และ ) ครอบสิ่งที่เราไม่ต้องการให้ขึ้นต้น เท่านั้นเป็นอันจบครับ</p>
<p>ยกตัวอย่างเช่น เราไม่ต้องการให้ขึ้นต้นด้วย abc แต่หลังจากนั้นจะเป็นอะไรก็ได้ เราก็ใช้ pattern เป็น ^(?!abc)\w+ ครับ ทีนี้ คำที่ขึ้นต้นด้วย abc ทั้งหมด จะ fail ในการ match กับ pattern ครับ</p>
<p>ไอ้เจ้า Zero-width negative look ahead assertion จริง ๆ แล้วมันมีอะไรมากกว่านั้นครับ อธิบายต่ออีกหน่อยละกัน สาเหตุที่เราเรียกว่า Zero-width assertion เพราะเราไม่นับว่ามันเป็นตัวอักษร และมันจะทำหน้าที่สำหรับตรวจดูว่าจะเอาไป match ได้หรือเปล่าเท่านั้น โดยไม่เอาค่าในวงเล็บไปใส่ในผลการ match</p>
<p>นอกเหนือจาก negative look ahead แล้ว มันยังมีรูปแบบอื่น ๆ ที่เกี่ยวข้องด้วย รวมแล้วมี 4 แบบ คือ positive look ahead, negative look ahead, positive look behind และ negative look behind&#8230; มาดูกันทีละตัวเลยครับ</p>
<p><strong>Positive Look Ahead</strong> จะใช้สำหรับการ match ที่ตามหลังกัน เขียนอยู่ในรูปแบบ q(?=u) หมายถึง จะ match กับ q ที่ตามด้วย u เท่านั้น (เราจะสังเกตได้ว่า q จะถูกนำไปใส่ในผลการ match แต่ u ไม่ถูกนำไปรวม เพราะว่ามันเป็น zero-width assertion ไงครับ)</p>
<p><strong>Negative Look Ahead</strong> อันนี้พูดถึงไปแล้วตั้งแต่แรก ใช้สำหรับการ match สิ่งที่ไม่ตามกัน เขียนในรูปแบบ q(?!u) หมายถึงว่า จะ match กับ q ที่ไม่ได้ตามด้วย u (จากตัวอย่างแรกของเรา เขียนเริ่มต้นว่า ^(?!abc) นั่นคือ เริ่มต้นประโยค หรือ ^ ที่ไม่ตามด้วย abc หรือ (?!abc) นั่นเอง)</p>
<p><strong>Positive Look Behind</strong> จะคล้าย ๆ กับ Positive Look Ahead ครับ แต่ทำจากด้านหลังมา เขียนอยู่ในรูปแบบ (?&lt;=a)b จะหมายถึงว่า จะ match กับ b ที่ตามหลัง a อยู่</p>
<p><strong>Negative Look Behind</strong> ก็ในทำนองเดียวกันกับ Negative Look Ahead เลยครับ ทำจากด้านหลังมา เขียนอยู่ในรูปแบบ (?&lt;!a)b จะหมายถึงว่า จะ match กับ b ที่ไม่ได้นำหน้าด้วย a</p>
<p>ดังนั้น มาถึงตรงนี้แล้ว ถ้าเราอยากเขียน pattern ให้ match กับข้อความที่ไม่ได้ลงท้ายด้วยคำว่า end ล่ะ จะต้องเขียนยังไง&#8230;</p>
<p>เฉลย \w+(?&lt;!end)$ ไงครับ (\w = ตัวอักษรใด ๆ ตามด้วย Negative Look Behind และปิดท้ายด้วย $ คือ สิ้นสุดประโยค)</p>
<p>สนุกมั๊ยครับ <img src='http://blog.chonla.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.chonla.com%2F2010%2F06%2Fregular-expression-%25e0%25b9%2584%25e0%25b8%25a1%25e0%25b9%2588%25e0%25b9%2580%25e0%25b8%25a3%25e0%25b8%25b4%25e0%25b9%2588%25e0%25b8%25a1%25e0%25b8%2595%25e0%25b9%2589%25e0%25b8%2599%25e0%25b8%2594%25e0%25b9%2589%25e0%25b8%25a7%25e0%25b8%25a2-%25e0%25b9%2580%25e0%25b8%2582%25e0%25b8%25b5%25e0%25b8%25a2%2F&amp;title=Regular%20Expression%20%3A%20%E0%B9%84%E0%B8%A1%E0%B9%88%E0%B9%80%E0%B8%A3%E0%B8%B4%E0%B9%88%E0%B8%A1%E0%B8%95%E0%B9%89%E0%B8%99%E0%B8%94%E0%B9%89%E0%B8%A7%E0%B8%A2%26%238230%3B%20%E0%B9%80%E0%B8%82%E0%B8%B5%E0%B8%A2%E0%B8%99%E0%B8%A2%E0%B8%B1%E0%B8%87%E0%B9%84%E0%B8%87%E0%B9%80%E0%B8%99%E0%B8%B5%E0%B9%88%E0%B8%A2" id="wpa2a_2"><img src="http://blog.chonla.com/wp-content/plugins/add-to-any/share_save_171_16.gif" width="171" height="16" alt="Share"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.chonla.com/2010/06/regular-expression-%e0%b9%84%e0%b8%a1%e0%b9%88%e0%b9%80%e0%b8%a3%e0%b8%b4%e0%b9%88%e0%b8%a1%e0%b8%95%e0%b9%89%e0%b8%99%e0%b8%94%e0%b9%89%e0%b8%a7%e0%b8%a2-%e0%b9%80%e0%b8%82%e0%b8%b5%e0%b8%a2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

