วิธีการใช้ preg_match_all() ค้นหาค่าที่มีการขึ้นขึ้นบรรทัดใหม่ เยอะๆ

PHP Knowledge เป็น บอร์ดรวามความรู้ php เน้นบทความ แนวทางการเขียนโปรแกรม บันทึกกันลืม เพื่อให้สมาชิกได้เขียนความรู้ที่ตัวเองมีให้สมาชิกท่านอื่นๆ ได้ เข้ามาอ่าน และ ไว้อ่านเองกันลืมด้วย

Moderator: mindphp, ผู้ดูแลกระดาน

ภาพประจำตัวสมาชิก
Ittichai_chupol
PHP VIP Members
PHP VIP Members
โพสต์: 5410
ลงทะเบียนเมื่อ: 19/09/2018 10:33 am

วิธีการใช้ preg_match_all() ค้นหาค่าที่มีการขึ้นขึ้นบรรทัดใหม่ เยอะๆ

โพสต์ที่ยังไม่ได้อ่าน โดย Ittichai_chupol »

- สำหรับผู้ที่กำลังศึกษาพัฒนา เว็บบอร์ด phpbb นัน คงน่าจะมีการเคยใช่งาน preg_match_all() กันมาบางนั้น คงน่าจะเคยเจอกับการที่จะใช้งาน preg_match_all ที่มีปัญหากับการขึ้นบันทึกใหม่นั้น เพราะจะทำให้การเขียนเงือนไข้ของ preg_match_all ยากขึ้นขึ้นเพราะ จะต้องมากังวลเรื่องที่จะเว้นช่องว่างอย่างไร เท่านั้นถึงจะได้ค่าที่ต้องการออกมาได้ แต่ถึงอย่างนั้น เราใช้วิธีการที่ตัดค่าบันทึดออกไปน่าจะงานกว่า แล้วค่อยมาหาค่านั้นๆที่หลัง ดังตัวอย่างต่อไป นี้

โค้ด: เลือกทั้งหมด

<div class="inline-attachment">
         
      
            <dl class="file">
         <dt class="attach-image"><img src="....../download/file.php?id=57716&sid=e2122165e1f964d2941396022d589bdc" class="postimage" alt="prclg112452TswAI3cnf-o.jpg" onclick="viewableArea(this);" /></dt>
                  <dd>prclg112452TswAI3cnf-o.jpg (160.26 KiB) Viewed 1 time</dd>
      </dl>
      
      
      
  </div>
จากโคดด้านบนจะเห็นว่า มีการขึ้นบรรทัดใหม่เยอะมาก จนทำให้มีช่องว่างเยอะมาก ซึ้งถ้าเป็นการ ใช้

โค้ด: เลือกทั้งหมด

preg_match_all('/<div class="inline-attachment">(.*)<\/div>/', $input_lines, $output_array);
ก็ไม่สามารถหาค่าได้เลย เพราะมีการเว้น บรรทัดไม่ถูกต้องตามเนื้อหาจริงๆ

แต่จะต้องทำการตัดค่า การขึ้นบรทัดออกก่อน ดังนี้

โค้ด: เลือกทั้งหมด

preg_replace("/[\n\r]/", "", $message)
แล้วจากนั้นก็นำมารวมกันเพื่อค้นหา ใหม่ ดังนี้

โค้ด: เลือกทั้งหมด

   preg_match_all('/<div class="inline-attachment">(.*?)<\/div>/', preg_replace("/[\n\r]/", "", $message), $output_array_img);
ขอให้วันนี้เป็นวันที่ดี
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 64