Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > preg_replace <pre ที่มี class หรือไม่มี class ก็ได้. ทำยังไงครับ?



 

preg_replace <pre ที่มี class หรือไม่มี class ก็ได้. ทำยังไงครับ?

 



Topic : 122105



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์




ผมมีโค้ดอยู่ประมาณนี้
Code (PHP)
<pre><code>
&lt;body&gt;
  &lt;p class="text-center"&gt;Text center&lt;/p&gt;
&lt;/body&gt;
</code></pre>


และ
Code (PHP)
<pre class="something"><code>
&lt;body&gt;
  &lt;p class="text-center"&gt;Text center&lt;/p&gt;
&lt;/body&gt;
</code></pre>


และบางทีมันก็มาหลายๆอันต่อๆกัน
Code (PHP)
<pre><code>
&lt;body&gt;
  &lt;p class="text-center"&gt;Text center&lt;/p&gt;
&lt;/body&gt;
</code></pre>
<pre class="something"><code>
&lt;body&gt;
  &lt;p class="text-center"&gt;Text center&lt;/p&gt;
&lt;/body&gt;
</code></pre>
<pre><code>
&lt;body&gt;
  &lt;p class="text-center"&gt;Text center&lt;/p&gt;
&lt;/body&gt;
</code></pre>


คือทั้งสองอันจะต่างกันตรงที่อันแรก <pre> ธรรมดาไม่มี class="..." กับอันที่สองมันมี
ผมจะทำให้ทั้งสองอัน คืออันที่ไม่มี class ให้มี class="line-numbers" กับอันที่มี class อยู่แล้วให้เพิ่มเข้าไปเป็น class="something line-numbers"

ตอนนี้ผมทดลอง pattern ดักจับมาเฉพาะ <pre เป็นชุดๆไปด้วย pattern นี้
Code (PHP)
$pattern = '{           # recursive regex to capture contents of "main" PRE
    <pre(?:class=["\']["\']|.*?)\s*>              # match any class PRE opening tag
      (                                   # capture "main" PRE contents into $1
          (?: (?!<pre[^>]*>|</pre>). )++  # possessively match all non-DIV tag chars
      )                                   # end group 1 capture
    </pre>                               # match the "main" class PRE closing tag
}iusx';

แต่ก็ยังหาวิธีดัก class ไม่ได้อยู่ดี แถมยังนึกไม่ออกว่าจะเอา pattern ที่ใช้กับ preg_match_all นี้ไปใช้กับ preg_replace ยังไงครับ



Tag : PHP









ประวัติการแก้ไข
2016-03-24 17:53:23
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-03-24 17:52:41 By : mr.v View : 799 Reply : 3
 

 

No. 1



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ได้แล้วครับ แหะๆ
Code (PHP)
class Modifier
{


        /**
         * automatically add line numbers class to pre and code content.
         * 
         * @link http://www.devnetwork.net/viewtopic.php?f=38&t=102670 long pattern from here.
         * @param string $content
         * @return string
         */
        public function automaticAddLineNumbersClass($content = '')
        {
            $pattern = '/<pre?(([^>]*)class=["|\'](?<class>[^"]*)["|\'])?.*\s*><code/iu';
            $content = preg_replace_callback($pattern, [&$this, 'replaceAddClassToPre'], $content);
            return $content;
        }// automaticAddLineNumbersClass


        /**
         * replace or add class to pre tag.
         * 
         * @param array $matches
         * @return string
         */
        private function replaceAddClassToPre($matches)
        {
            if (is_array($matches) && array_key_exists(0, $matches)) {
                if (strpos($matches[0], 'class=') !== false) {
                    $matches[0] = str_replace('\'', '"', $matches[0]);
                    return str_replace('class="', 'class="line-numbers ', $matches[0]);
                } elseif (strpos($matches[0], '<pre>') !== false) {
                    return str_replace('<pre', '<pre class="line-numbers"', $matches[0]);
                } else {
                    return $matches[0];
                }
            }
        }// replaceAddClassToPre


}







แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-24 18:37:21 By : mr.v
 


 

No. 2



โพสกระทู้ ( 5,105 )
บทความ ( 4 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


มาเองตอบเอง
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-24 18:49:31 By : apisitp
 

 

No. 3



โพสกระทู้ ( 4,756 )
บทความ ( 8 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : apisitp เมื่อวันที่ 2016-03-24 18:49:31
รายละเอียดของการตอบ ::
ตอนแรกมันจนปัญญาจริงๆฮะ ไม่เชี่ยวเรื่อง regexp ด้วย
แต่จู่ๆมันก็เกิดปิ๊งขึ้นมาเลยหาโค้ดใกล้เคียงอันใหม่ไล่เลาะไปเรื่อยๆ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-03-25 06:41:47 By : mr.v
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : preg_replace <pre ที่มี class หรือไม่มี class ก็ได้. ทำยังไงครับ?
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่