ช่วยทีครับเรื่อง Regular Expression

เริ่มโดย RaulGonzales, 21 พฤศจิกายน 2010, 21:59:10

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

RaulGonzales

<table><table>xxx</table></table>

อยากเขียน regular expression เพื่อดึงค่าที่เป็นสีแดงออกมา

ที่ผมเขียนมันดึงได้ แต่มันมองที่ </table> ตัวแรกที่เป็นสีแดง

อ้างถึง<table.*?>.*?<\/[\s]*table>

ช่วยแนะนำทีครับ
ลงประกาศ ซื้อ,ขาย,เช่า,บ้าน,คอนโด,ที่อยู่ กับ www.properlive.com

Tee++;

[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


mrtomson

#2
อ่านคำถามแล้วงงๆ ไม่เข้าใจจุดประสงค์เท่าไร
แต่ผมพอจะแปลคำถามคุณคุณออกมาได้ว่า

<table><table>xxx</table></table>

คุณต้องการเขียน Expression เพื่อดึง ข้อมูลสีเขียวออกมา แต่ที่คุณเขียนมันกลับดึงเอา ตรงสีแดงออกมา(พร้อมสีเขียวด้วย) = <table>xxx</table> แทนที่จะเป็น xxx ใช่ไหม

คำถามของคุณเป็นแบบนี้ใช่ไหม ถ้าใช่ล่ะก็


<table><table>(.*? ตรงนี้ EXPRESSION อะไรก็ว่ากันไป .*?)<table></table>


ก็น่าจะได้แล้ว กล่าวคือถ้าซ้อน table 2 เราก็เขียน table ครอบใน Expression เพิ่มอีกันก็พอ

วิธีการคิดแบบง่ายๆก็คือ
1. เปรียบ tag table เป็นโต๊ะ 1 ตัว
2. เรามีโต๊ะอยู่ 2 ตัว
3. ซึ่งวางซ้อนกันอยู่
4. บนโต๊ะตัวบน มีกระดาษวางอยู่ ในกระดาษมีข้อความเขียนเอาไว้ว่า xxx

แน่นอนว่าการวางซ้อนกันคือ การเอาโต๊ะวางบนโต๊ะ ซึ่งจะมีตัวหนึ่งอยู่ล่างอีกตัวอยู่บนแน่นอน

การจะหาว่าบนโต๊ะ ของโต๊ะตัวที่ซ้อนกันอยู่(โต๊ะตัวบน)มีอะไรวางอยู่เราก็ต้อง บอกกับ php ว่า ไปหาบนโต๊ะตัวบนที่ซ้อนกันอยู่ซิว่ามีอะไรวางอยู่
... ส่วนคุณไปบอกว่าไปหาบนโต๊ะซิว่ามีอะไรวางอยู่ มันก็เลยหาที่โต๊ะตัวแรก ซึ่งมันก็พบว่า บนโต๊ะ >> มีโต๊ะอีกตัววางอยู่ และมีกระดาษวางอยู่บนโต๊ะตัวบนเขียนว่า xxx
เพราะคุณลืมบอกไปว่าโต๊ะตัวที่ซ้อนกันอยู่ มันจึงเอาเอกสารจากโต๊ะตัวแรกที่มันพบมาให้คุณ
หากคุณบอกมันว่า บนโต๊ะที่ซ้อนกันอยู่ (โต๊ะตัวบน) มีอะไรวางอยู่ ไปหามาซิ มันก็จะมาบอกคุณว่า >> มีกระดาษวางอยู่เขียนว่า xxx

ประมาณนี้แหละครับ

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

ป.ล. อีกวิธีนึงคือใช้ preg_match_all แล้ว เลือก array ลำดับถัดไปก็เป็นอันใช้ได้
ป.ล. 2 มีคนตอบไปแล้วระหว่างผมตอบ ขออภัยด้วยที่ตอบซ้ำ
ติดต่อได้ทาง PM นะครับ

iteasy

รับเขียนระบบ AUTO POST [SMF] & [Discuz]  ตัวอย่าง Click !! สนใจ PM ครับ

[direct=http://www.mk-job.com]งานราชการ เปิดสอบราชการ[/direct]
[direct=http://www.compactcameralens.com]Compact Camera DSLR & Lenses[/direct]

sunkoster

 
preg_match_all("/<table>(.*?)<\/table>/", $html, $matches);

แบบนี้น่าได้นะ เอาไปทั้งหมดเลย มีแบบนี้กี่ชุด

แล้วลอง print_r($matches); ดูผล
แล้ว เลือกเอา index เช่น
$matches[1] ไปใช้

ลองดูผลการ print แล้วค่อยเลือก
[direct=http://zfind.item69.com/]amazon advance search products[/direct] | [direct=http://zfind.item69.com/]amazon[/direct]

RaulGonzales

อ้างถึงจาก: Tee++; ใน 21 พฤศจิกายน 2010, 22:56:37
preg_match('|<table>(\w+?)<\/table>|', $string, $matches);

ขอบคุณครับ  :wanwan017:

ปล. ขอบคุณทุกๆคนที่ช่วยกันตอบด้วยครับ  :wanwan017: :wanwan017: :wanwan017:
ลงประกาศ ซื้อ,ขาย,เช่า,บ้าน,คอนโด,ที่อยู่ กับ www.properlive.com