• April 27, 2018

    ไฟล์ test.php ใช้วิธีการเขียนไฟล์ โดยอ่านข้อมูลเดิมและเขียนต่อข้างล่างลงไปเรื่อยๆ (write mode : a+)
    ปกติ ก็จะเป็นวันที่ ไล่เรียงลงไปเรื่อย แต่ถ้าเกิดตัวแปร $i ซ้ำกับวันที่ที่มีอยู่ในไฟล์ test.php อยู่แล้ว เช่น $i = 2014-03-14 ดังภาพ

    20140314171308.jpg (857×329)

    ถ้า Playlist name เป็นของวันที่ 2014-03-14 (โดยไม่สนเลข _Pl ที่อยู่หลัง 2014-03-14)
    ต้องการลบทั้งหมดที่อยู่ใน แท็ก <playlist> “ทุกแถว” (ทั้งหมดในกรอบสีแดงตามภาพด้านบน)
    ต่อมา เมื่อลบแล้ว..
    ต้องการนำข้อมูลใหม่ ซึ่งก็คือ <playlist> ที่มี $i = 2014-03-14 มา “แทนที่” (ไม่ใช่ต่อท้ายสุด) ในจุดที่โดนลบออกไปนั่นเอง

    *ซึ่งจำนวนแถวที่ลบกับจำนวนแถวที่มาเพิ่มอาจจะไม่เท่ากัน อาจจะมากหรือน้อยกว่าก็ได้ เช่น ลบออกไป 4 playlist ต้องการแทนที่ด้วย 2 playlist

    20140314172254.jpg (1302×331)

    ใช้ 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>


เวอไนน์ไอคอร์ส

ประหยัดเวลากว่า 100 เท่า!






เวอไนน์เว็บไซต์⚡️
สร้างเว็บไซต์ ดูแลเว็บไซต์

Categories


Uncategorized