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

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

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingจะแทนค่ายังไงดีครับเนี่ย (regular) <td class="..."><div="..">...</div></td> งง
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: จะแทนค่ายังไงดีครับเนี่ย (regular) <td class="..."><div="..">...</div></td> งง  (อ่าน 3133 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
okgofun
ก๊วนเสียว
*

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

กระทู้: 396



ดูรายละเอียด
« เมื่อ: 14 กรกฎาคม 2007, 14:26:30 »

จะแทนค่ายังไงดีครับเนี่ย (regular) <td class="..."><div="..">...</div></td> งง

ลองทั้ง preg_match , eregi_replace แต่มันไม่ผ่านอะครับ

ประมาณว่า ข้อมูลที่เราจะแทนค่า ถ้ามันเป็นพวก html พวกโครงสร้างตารางต่างๆ ซึ่งมันไม่ได้มีแต่ตัวหนังสือหนะครับ เหมือนว่ามันตรวจสอบไม่ได้อะ

ตรง <td class="abc"> นี่ได้ พอมาถึงตรง <div มันคงมีปัญหา ผมเขียนโค๊ดประมาณนี้

if(!preg_match('/^<td class="abc">(.*?)<\/td>$/',$data) {
    // code
}

คือมันไม่ผ่านครับ ทั้งที่โครงสร้างที่ผมกำหนดทดสอบเอาไว้ก็ตรงตามที่กำหนด

ใครทราบขอคำแนะนำด้วยครับ พยายามหาทางแล้วอะ แต่ไม่ได้จริงๆครับ
บันทึกการเข้า

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

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

กระทู้: 169



ดูรายละเอียด เว็บไซต์
« ตอบ #1 เมื่อ: 14 กรกฎาคม 2007, 15:44:14 »

อ่านคำถามไม่เข้าใจครับ
ช่วยยกตัวอย่าง ข้อมูลที่มีอยู่และข้อมูลที่ต้องการ ให้หน่อยครัยบ
เดี๋ยวช่วยบอกให้
บันทึกการเข้า
Pipo
Newbie
*

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

กระทู้: 99



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 14 กรกฎาคม 2007, 15:45:52 »

<?
$strString   =   '<td class="abc"><div="..">...</div></td>';

if(!preg_match('/^<td class="abc">(.*?)<\/td>$/',$strString)) {
    echo "OMG";
}
?>

งงกับคำถามแต่คิดว่าน่าจะใช่คำตอบ

เข้าใจตรง ^ กับ $ ใช่ไหมครับ
บันทึกการเข้า
Judas
สมุนแก๊งเสียว
*

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

กระทู้: 934



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 14 กรกฎาคม 2007, 16:14:51 »

ลองยกตัวอย่างข้อมูลที่มีอยู่ กับข้อมูลที่อยากให้เป็นมาจิครับ
บันทึกการเข้า

okgofun
ก๊วนเสียว
*

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

กระทู้: 396



ดูรายละเอียด
« ตอบ #4 เมื่อ: 14 กรกฎาคม 2007, 21:10:00 »

ลอง
<?
$strString   =   '<td class="abc"><div="..">...</div></td>';

if(!preg_match('/^<td class="abc">(.*?)<\/td>$/',$strString)) {
    echo "OMG";
}
?>

งงกับคำถามแต่คิดว่าน่าจะใช่คำตอบ

เข้าใจตรง ^ กับ $ ใช่ไหมครับ


ถูกต้องแล้วครับ ประมาณนั้น แต่ผมลองแล้วคือมันไม่ได้ผลครับ ยังไม่เข้าใจ (.*?) จริงๆแล้วมันหมายถึงยังไงแน่ครับ หมายถึงกลุ่มคำใดๆในวงเล็บเหรอครับ ที่ผมเห็นยังมี (.+?) อีก (ส่วน ^,$ ที่เป็นขึ้นต้นหรือลงท้ายพอจะเข้าใจครับ)

หลักๆที่ผมต้องการคือว่า ผมดึงข้อมูลจากเว็บเพจๆหนึ่ง ซึ่งจะมี tag html ในส่วนของ table เช่น ผมต้องการตรวจสอบ ข้อมูลตาม tag ที่ดึงมานี่คือ

<td class="mystyle">
   <div id="wow">Hello This is my site <b>Good site</b> <a href="http://www.goodsitetest.com " target="_blank">Click Now</a>
   <br><br>New Line
<div id="style2">Ha Ha Ha</div>
</div>
</td>

ต้องการตรวจสอบว่า ถ้าขึ้นต้นด้วย <td class="mystyle">.. ข้อมูลใดๆก็ได้ที่อยู่ระหว่าง tag นี้ซึ่งอาจเป็น code html ตามตัวอย่างขั้นต้น ที่อาจจะมีการอัพเดทเปลี่ยนแปลงได้ ไม่ตายตัว และอาจจมีสัญลักษณ์ ",' หรือ tag ต่างๆที่อาจทำให้ regular expression ไม่ทำงาน</td>

กึ่งกลางของ <td class="mystyle"> และ </td> ผมต้องการตรวจสอบครับ ว่าเป็นลักษณะนี้ใหม ถ้าเป็นลักษณะนี้ ผมอาจจะ replace ให้เป็นไสตล์ของผม หรืออาจจะให้ค่าเป็น FALSE

การเขียนโค๊ดหลักจากนั้นพอจะเข้าใจครับ

แต่ *** ปัญหามันอยู่ที่ ระหว่างกึ่งกลาง <td class="mystyle"></td> นี่สิครับ มันจะมีการเปลี่ยนแปลงบ่อยๆ ผมจะเขียน regular expression ยังไงดี เพราะรู้สึกว่าถ้ามันมีเครื่องหมายบางอย่าง จะทำให้การทำงานของ regular  expression มันไม่ถูกต้องในการตรวจสอบครับ

แต่ถ้าเบื้องต้นง่ายๆบางอักขระเช่น

$strString = "http://www.abc.com " ;
if(preg_match('/^<a href="abc">(.*?)<\/a>$/',$strString)) {
    echo "URL";
}

แบบนี้หนะได้ครับ

แต่.. ถ้ามันมีโค๊ด html หรืออักขระที่ซับซ็อนกว่านี้มันจะ มีปัญหา

ไม่รู้ว่าจะเขียนยังไงดี ครับ ขอบคุณครับ
« แก้ไขครั้งสุดท้าย: 14 กรกฎาคม 2007, 21:12:59 โดย okgofun » บันทึกการเข้า

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

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

กระทู้: 1,852



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 14 กรกฎาคม 2007, 23:28:51 »

บอกตามตรงยังไม่ได้อ่านกระทู้ละเอียดๆ หรอก ไม่ค่อย บายนะ แต่ท่าให้เดาว่าพลาดตรงไหนคิดว่า ลองเติมนี่ลงไปครับ

$html = ereg_replace("\n|\r", "", $html);

จากนั้นค่อยเอา $html ไปทำงานต่อ
บันทึกการเข้า

kengz
คนรักเสียว
*

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

กระทู้: 169



ดูรายละเอียด เว็บไซต์
« ตอบ #6 เมื่อ: 15 กรกฎาคม 2007, 01:29:24 »

ไม่สามารถใช้ regular expression เพียงอย่างเดียวตรวจสอบได้ครับ
สิ่งที่คุณต้องการเขียนจะออกแนว parser ซะมากกว่า

ปัญหาแรกของคุณคือ ใน regular expression ไม่ค่อยใช้งานได้กับตัวเว้นบรรทัด (\r\n และ \n) ครับ ดังนั้น step แรกที่คุณต้องการคืออาจจะตัดมันออกไปก่อน อย่างที่พี่ตี๋ได้แนะนำไว้

หากคุณต้องการ grab ข้อความที่อยุ่ระหว่าง <td class="abc"> และ </td>
ตามความจริงแล้ว คุณอาจจะใช้ preg_match("/<td class=\"abc\">(.*)<\/td>/",$string,$matches); ก็ได้ครับ แต่อาจจะผิดพลาดอยู่
เช่น

<td class="abc">xxx</td><td class="xyz">xxx</td>

สังเกตุว่า ในข้อความสีแดง ก็จะ match regex ที่คุณเขียนไปเหมือนกัน แต่ว่าไม่ใช่ข้อมูลจริง ๆ
ดังนั้นคุณควรใช้วิธีอื่นมาอ่านข้อมุลจะดีกว่าครับ จะทำงานได้แม่นยำกว่า

เช่น
แยก 1 tag เป็น array 1 ช่อง

<table>
<tr>
<td>
<a href="xxx">
ssss
</a>
</td>
</tr>
</table>

แล้วค่อย ๆ ไล่ไปทีละ ตัว ใช้ regular expression match ว่าเริ่ม <td class="aaa"> มั้ย
จากนนั้นก็ grab มาเรื่อย ๆ จนถึง </td> ตัวแรก.. อะไรทำนองนี้อ่ะครับ น่าจะทำงานได้แม่นยำกว่า


ปล. .*? ไม่มีนะครับ มีแค่ .* หรือ .? เพราะ * กับ ? เป็นตัวบ่งบอกปริมาณ
? = 0 ถึง 1
* = 0 ถึง unlimit
บันทึกการเข้า
okgofun
ก๊วนเสียว
*

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

กระทู้: 396



ดูรายละเอียด
« ตอบ #7 เมื่อ: 15 กรกฎาคม 2007, 11:05:33 »

อ่า ทำได้แล้วครับ ขอบคุณทุกท่านครับ หลักๆนี่คือถ้าตัด /r/n/t ออกก็โอเคแล้ว ที่เหลือก็อย่างที่คุณ kengz บอกจริงๆครับ คือต้องเขียนโค๊ดกรองเอาเองอีกชั้น ต้องรู้ regular express แบบเยอะๆเลย

ผมลองโหลด regex buddy มา ค่อนข้างมีประโยชน์ แต่ก็งงตึ๊บ  Cheesy
« แก้ไขครั้งสุดท้าย: 15 กรกฎาคม 2007, 11:07:11 โดย okgofun » บันทึกการเข้า

จะต้องทำให้ได้เดือนละอย่างต่ำ $1,000 แล้วก็ไม่โดนแบน
หน้า: [1]   ขึ้นบน
พิมพ์