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

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

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

User avatar
Ittichai_chupol
PHP VIP Members
PHP VIP Members
Posts: 2953
Joined: 19/09/2018 10:33 am

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

Postby Ittichai_chupol » 24/07/2019 6:11 pm

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


Code: Select all

<div class="inline-attachment">
         
     
            <dl class="file">
         <dt class="attach-image"><img src="....../download/file.php?id=57716&amp;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>


จากโคดด้านบนจะเห็นว่า มีการขึ้นบรรทัดใหม่เยอะมาก จนทำให้มีช่องว่างเยอะมาก ซึ้งถ้าเป็นการ ใช้

Code: Select all

preg_match_all('/<div class="inline-attachment">(.*)<\/div>/', $input_lines, $output_array);


ก็ไม่สามารถหาค่าได้เลย เพราะมีการเว้น บรรทัดไม่ถูกต้องตามเนื้อหาจริงๆ

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

Code: Select all

preg_replace("/[\n\r]/", "", $message)


แล้วจากนั้นก็นำมารวมกันเพื่อค้นหา ใหม่ ดังนี้

Code: Select all

   preg_match_all('/<div class="inline-attachment">(.*?)<\/div>/', preg_replace("/[\n\r]/", "", $message), $output_array_img);



Return to “PHP Knowledge”

Who is online

Users browsing this forum: No registered users and 27 guests