ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingมีแต่ split ให้แยกค่าที่ต้องการออกมา แล้วมีวิธีเก็บค่าที่ต้องการเลยใหมครับ??
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: มีแต่ split ให้แยกค่าที่ต้องการออกมา แล้วมีวิธีเก็บค่าที่ต้องการเลยใหมครับ??  (อ่าน 2205 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
okgofun
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 396



ดูรายละเอียด
« เมื่อ: 11 กันยายน 2007, 12:06:58 »

มีแต่ split ให้แยกค่าที่ต้องการออกมา แล้วมีวิธีเก็บค่าที่ต้องการเลยใหมครับ?? อ่านคำถามแล้วอาจจะงงๆนะครับ

คือสมมุตินะครับ อย่างเช่นถ้าเราแยกค่าต่างๆ เช่น

$text = "hello|X|สวัสดี" ;
$ex = explode("|X|",$text) ;

// ผลลัพท์ที่ได้คือ ก็จะได้ค่าสองค่าคือ hello และ สวัสดี

แต่ทีนี้บางที ถ้าเราต้องกำหนดข้อมูลที่จะตรวจสอบ ซึ่งจะเป็น regular expression ซึ่งก็ต้องใช้คำสั่ง split ใช่ใหมหละครับ

เช่น

$text = "hello<b>สบายดีใหม</b><i>ครับ</i>" ;
$split = split("<b>(.*)<\/b>",$text) ; // ตัวอย่างเฉยๆนะครับ

พอแยกออกมาแล้ว ค่าที่ได้มันจะเป็น hello และ <i>ครับ</i>

แหะๆ  Cheesy คือผมอยากได้ค่าที่อยู่ใน <b>(.*)</b> แบบนี้มากกว่าหนะครับ แต่รุ้จักเพียงแค่ split ที่ใช้เช็คแบบ regular exression ได้ แต่มันก็ได้แต่แยกค่าอะ ถ้าเราจะ grab ค่าจะเขียนยังไงดีอะครับ

บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #1 เมื่อ: 11 กันยายน 2007, 12:52:53 »


หมายถึงต้องการคำว่า "สบายดีไหม" ใช่หรือป่าวครับ

ผมใช้วิธีนี้ครับ
โค๊ด:
if (preg_match('#<b>(.*)</b>#', $text, $match)) {
  echo $match[1];
}

$match[0] = ได้ค่า "<b>สบายดีใหม</b>"
$match[1] = จะเป็นค่า "สบายดีใหม" ที่ต้องการครับ


บันทึกการเข้า

okgofun
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 396



ดูรายละเอียด
« ตอบ #2 เมื่อ: 11 กันยายน 2007, 13:01:17 »


หมายถึงต้องการคำว่า "สบายดีไหม" ใช่หรือป่าวครับ

ผมใช้วิธีนี้ครับ
โค๊ด:
if (preg_match('#<b>(.*)</b>#', $text, $match)) {
  echo $match[1];
}

$match[0] = ได้ค่า "<b>สบายดีใหม</b>"
$match[1] = จะเป็นค่า "สบายดีใหม" ที่ต้องการครับ




อ่าา ใช่แล้วครับ ใช้ preg_match ได้เหรอครับ เอ่อ แล้วเครื่องหมาย # ก่อน <b> หมายถึงอะไรเหรอครับ แล้วเงื่อนไขการเขียน expression ระหว่าง eregi กับ preg มันต่างกันมากใหมอะครับ เห็นมันมีพวก /W อะไรก็ไม่รู้ ดูยากจัง หรือแทนค่าแบบเดียวกับคำสั่ง eregi ได้เลยครับ
บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #3 เมื่อ: 11 กันยายน 2007, 13:12:05 »

# ในความหมายคือตัวลิมิตเตอร์ครับ

ต้องใช้ปิดหัวกะท้ายของ reg ที่ใส่ไว้ ในกรณีใช้ตระกูล preg อะ

แต่เป็นผมปกติผมใช้ / แฮะ
แต่ใช้ยาก ในกรณีกรองแท็ก (ต้องไป \ หน้าแท็กอื่นทุกครั้ง -*-)

เดียวหันมาใช้ # แทนบ้างดีกว่า  Smiley
บันทึกการเข้า

okgofun
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 396



ดูรายละเอียด
« ตอบ #4 เมื่อ: 11 กันยายน 2007, 13:17:14 »

่อ่าา ลองแล้วครับ preg_match

เอ? แล้วถ้าในข้อความ มันมี tag <b>ข้อความ</b> อยุ่หรือ tag อะครับ แบบนี้จะเอามาได้ยังไงหมด เพราะเหมือนว่าค่า index 0 มันเป็น tag แรกที่เจอเท่านั้นอะ

// example
$text = "สวัสดี <b>สบายดีใหม</b><i>ครับ</i>กินข้าวหรือยัง <b>คิดถึงนะ</b>จะบอกให้ <b>รักด้วย</b>" ;

if (preg_match('#<b>(.*)</b>#', $text, $match)) {
  echo $match[1];
}

มันจะได้แค่ค่าเดียวเองครับ คือ สบายดีใหม พวกค่าอื่นๆที่อยู่ใน tag ที่กำหนด เช่นคำว่า คิดถึงนะ,รักด้วย มันไม่ยอมออกหนะครับ

ผมควรเขียนยังไงเหรอครับ

** หลักๆคืออยากให้คล้ายๆกับ split ที่มันแยกออกมาเป็น array แต่อันนี้จะเอาข้อความเหล่านี้หลายๆข้อความให้กลายเป็น array (น่าจะต้องการเป็น array เพราะมันมีหลายข้อความในบางกรณี)

php มีคำสั่งพวกนี้ใหมครับ หรือต้องมาเขียนฟังก์ชั่นเพิ่มเติมเอาเอง กลัวเปลือง process
« แก้ไขครั้งสุดท้าย: 11 กันยายน 2007, 13:22:06 โดย okgofun » บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #5 เมื่อ: 11 กันยายน 2007, 13:22:02 »


ใช้ function preg_match_all() ครับ

ผลลัพธ์อยู่ใน array index 1, 2, 3, ...

บันทึกการเข้า

okgofun
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 396



ดูรายละเอียด
« ตอบ #6 เมื่อ: 11 กันยายน 2007, 13:32:07 »


ใช้ function preg_match_all() ครับ

ผลลัพธ์อยู่ใน array index 1, 2, 3, ...



โอ๊วว !! ขอบคุณมากๆๆๆๆๆๆๆๆๆครับ  Kiss ได้แล้ว เยๆ Cheesy
บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
okgofun
ก๊วนเสียว
*

พลังน้ำใจ: 1
ออฟไลน์ ออฟไลน์

กระทู้: 396



ดูรายละเอียด
« ตอบ #7 เมื่อ: 11 กันยายน 2007, 13:38:51 »

# ในความหมายคือตัวลิมิตเตอร์ครับ

ต้องใช้ปิดหัวกะท้ายของ reg ที่ใส่ไว้ ในกรณีใช้ตระกูล preg อะ

แต่เป็นผมปกติผมใช้ / แฮะ
แต่ใช้ยาก ในกรณีกรองแท็ก (ต้องไป \ หน้าแท็กอื่นทุกครั้ง -*-)

เดียวหันมาใช้ # แทนบ้างดีกว่า  Smiley

เอ? ถ้าใช้แบบปิด tag ด้วย \ มันได้ผลครับ แต่ผมลองใช้ # แล้วไม่ปิดแต่ละอักขระพิเศษด้วย \ กลับไม่ได้ผลแฮะ

สงสัยต้องใช้ \ แล้วมานั่งปิด tag เหมือนเดิม เหนื่อยหน่อย เฮ้อ
บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,516



ดูรายละเอียด
« ตอบ #8 เมื่อ: 11 กันยายน 2007, 13:51:10 »

ส่วนมากหลายคนใช้แบบนี้ (.*)

แต่ความจริงถ้าอยากได้ผลลัพท์ดีๆ ผมแนะนำ

([^อะไรที่ไม่อยากจะเอา]*)

อย่าง ([^<>]*) ก็คือเอาทุกอย่างยกเว้น < กะ >

อย่างนี้อาจสบายใจกว่านะครับ  Smiley

ปล. ใช้ # แล้วก็ไม่ต้องปิดแท็กก็ได้นิครับ (ปิดแท็กที่ว่าคือ หมายถึงแท็ก html นะครับ ไม่ได้หมายถึงตัวลิมิเตอร์อะ)

preg_match("/<table(.*)>(.*)<\/table>/", $var , $match);

ตรงตัว \/  นี้แหละ  ถ้าไม่ \ กันหน้า /table
จะติด error ของตัวลิมิตเตอร์ =__="
บันทึกการเข้า

payu
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 125
ออฟไลน์ ออฟไลน์

กระทู้: 1,887



ดูรายละเอียด
« ตอบ #9 เมื่อ: 11 กันยายน 2007, 14:15:45 »

ความหมายของ # (pattern delimiter) คือว่า
ถ้าเราใช้ / เป็นตัวปิด pattern เราจะต้องใส่ cast character \ เข้าไปข้างหน้า </b> ครับ เพื่อไม่ให้มันเข้าใจผิดว่าจบ pattern แล้วนั่นเอง ...
แต่ถ้าเราใช้ # เป็นตัวปิดหัวท้าย .. การใช้ </b> แบบไม่ต้อง cast จึงไม่ทำให้มันเข้าใจผิดครับ ซึ่งง่ายกว่าต้องมา cast ทุกตัว (ถ้ามีเยอะ)
ส่วนตัวที่มีความหมายพิเศษตัวอื่นเช่น \s = space, \n = new line ยังคงต้อง cast ด้วย \ ตามปกติครับ

... ที่จริงเราสามารถใช้เครื่องหมายอะไรก็ได้้เป็น delimiter ครับเช่น / # หรือ %
แต่ที่นิยมใช้คือ / กับ # ครับ ... ใช้ # เพื่อไม่ให้ไปกวนกับตัวปิดแทก html นั่นเองจะได้ไม่ต้อง cast

« แก้ไขครั้งสุดท้าย: 11 กันยายน 2007, 15:08:42 โดย payu » บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์