ไฟล์ test.php ใช้วิธีการเขียนไฟล์ โดยอ่านข้อมูลเดิมและเขียนต่อข้างล่างลงไปเรื่อยๆ (write mode : a+)
ปกติ ก็จะเป็นวันที่ ไล่เรียงลงไปเรื่อย แต่ถ้าเกิดตัวแปร $i ซ้ำกับวันที่ที่มีอยู่ในไฟล์ test.php อยู่แล้ว เช่น $i = 2014-03-14 ดังภาพ
ถ้า Playlist name เป็นของวันที่ 2014-03-14 (โดยไม่สนเลข _Pl ที่อยู่หลัง 2014-03-14)
ต้องการลบทั้งหมดที่อยู่ใน แท็ก <playlist> “ทุกแถว” (ทั้งหมดในกรอบสีแดงตามภาพด้านบน)
ต่อมา เมื่อลบแล้ว..
ต้องการนำข้อมูลใหม่ ซึ่งก็คือ <playlist> ที่มี $i = 2014-03-14 มา “แทนที่” (ไม่ใช่ต่อท้ายสุด) ในจุดที่โดนลบออกไปนั่นเอง
*ซึ่งจำนวนแถวที่ลบกับจำนวนแถวที่มาเพิ่มอาจจะไม่เท่ากัน อาจจะมากหรือน้อยกว่าก็ได้ เช่น ลบออกไป 4 playlist ต้องการแทนที่ด้วย 2 playlist
ใช้ preg_match() ยังไง หรือใช้วิธีไหน
ตอบ
$x = '<form class="navbar-search" id="topsearch" action="/search.php"> <input type="hidden" name="show" value="quickref"> <input type="hidden" name="pattern" class="search-query" placeholder="Search" accesskey="s"> </form>'; $patt = '/<input type="(hidden)" name="show" value="quickref">/'; // แทน <input type="(hidden)" name="show" value="quickref"> ที่มี type="hidden" (hidden) คือตัวบอก $replace = 'test'; $p = preg_replace($patt,$replace,$x); echo htmlspecialchars($p);
$x คือ ข้อมูล มันก็คือ ตัวหนังสือทุกตัวใน Channel.txt
$x = file_get_contents('Channel.txt'); // อ่านไฟล์ Channel.txt เก็บข้อมูลไว้ใน $x
$patt คือ pattern ที่คุณต้องการค้นหา เช่น คุณต้องการค้นหา <playlist name=”2014-11-11_xxx”> อะไรก็แล้วแต่ </playlist> ที่ name=”2014-11-11_xxx”
$patt = '/<playlist name="(2014-11-11)_xxx"> อะไรก็แล้วแต่ <\/playlist>/'; // (2014-11-11) บอกว่าต้องการค้นหาที่มี 2014-11-11
$replace คือ ข้อมูลที่จะเอาไปแทนที่ เช่นจะแทนที่ด้วย <playlist name=”2014-12-15_xxx”> อะไรก็แล้วแต่ </playlist>
$replace = '<playlist name="2014-12-15_xxx"> อะไรก็แล้วแต่ </playlist>';
$p = preg_replace($patt,$replace,$x); คือ ค้นอะไรที่เหมือนกับ $patt ใน $x แล้ว แทนที่ดี $replace
$x = file_get_contents('Channel.txt'); $patt = '/<playlist name="(2014-11-11)_xxx"> อะไรก็แล้วแต่ <\/playlist>/'; $replace = '<playlist name="'.$i.'_xxx"> อะไรก็แล้วแต่ </playlist>'; // $i = 2014-03-14 $p = preg_replace($patt,$replace,$x); // $p จะเก็บค่าใหม่ของ $x echo htmlspecialchars($p);
เพิ่มเติม
$patt = '/<playlist name="(2014-11-11)_xxx"> อะไรก็แล้วแต่ <\/playlist>/'; // (2014-11-11) บอกว่าต้องการค้นหาที่มี 2014-11-11 โค๊ดนี้หมายความว่า $patt จะ = playlist name ทุกอันที่มีตัวเลข (2014-11-11) แม้ว่า _xxx หรือตรง "อะไรก็แล้วแต่" จะไม่เหมือนกัน เช่น <playlist name="2014-12-11_001"> A </playlist> <playlist name="2014-12-11_002"> B </playlist> <playlist name="2014-12-12_003"> C </playlist> <playlist name="2014-12-15_001"> D </playlist> $patt จะ = ทุกบรรรทัดที่มี (2014-11-11) แม้ว่าส่วนอื่นจะไม่เหมือนกัน ก็จะได้ <playlist name="2014-12-11_001"> A </playlist> <playlist name="2014-12-11_002"> B </playlist>