Regex - php正則匹配p標籤及帶特定的中文

來源:互聯網
上載者:User

第一章 什麼什麼

我想用php正則匹配到p標籤還有文字內容。

說明一下情況,
1、p標籤裡面可能有斷行符號、空格;
2、中文文字方面,“一”是會變的,“什麼什麼”也會變

回複內容:

第一章 什麼什麼

我想用php正則匹配到p標籤還有文字內容。

說明一下情況,
1、p標籤裡面可能有斷行符號、空格;
2、中文文字方面,“一”是會變的,“什麼什麼”也會變

我這麼說吧。不用很複雜的道理,簡單的幾個用例就坑死你:

This is your text.

This is a valid paragraph too, since HTML

paragraph don't have to contain an explicit ending tag. < p id = "sample" > This is another paragraph.

正則文法在理論上,不足以表示標籤之間的嵌套關係。形式文法中,正則文法是HTML的上下文無關文法的子集。即Regex的邏輯,理論上不足以表達HTML的文法結構。這一點請參考《編譯原理》、《有限自動機與形式文法》這兩門課程的相關知識。

而在實際應用中,正則更是不足(或極難)表達:

  • 標籤內部的空格和換行

  • 標籤的屬性

  • 不顯式寫出終止標籤的情況

  • 注釋、指令碼的影響

這個問題說了一遍又一遍:不要用正則解析HTML,請使用一個規範的解析器(Parser)。——在某些場合,針對特定的簡易用例,用正則你高興就好。但切記不要寫出很複雜的Regex,更不要試圖用正則去“無缺陷、普適的”匹配HTML,因為你遲早會失敗。

PHP的HTML解析可以通過PHP原生的DOM模組(某些伺服器環境下可能需要安裝對應擴充),或者第三方HTML解析庫來實現。

我現在遇到 1 個字元解析的問題。

你可以試試用Regex。

好的…… 現在我有 2 個問題了。

正則不好表達,用strpos匹配簡單點

我來自問自答了,其實我要的是這樣的

 $s = preg_replace('/

.*(第.{0,8}章\s+[^<]*).*<\/p>/s',"隨意$1",$s);

大概是這樣,關鍵在於要用s修飾符忽略斷行符號,不是題中說的中文的問題。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.