第一章 什麼什麼
我想用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修飾符忽略斷行符號,不是題中說的中文的問題。