2017-10-16 48 views
0

我的要求高度超出了我非常基本的正則表達式知識。我什至不能嘗試任何東西。你能幫我換$模式嗎?正則表達式模式需要包含所有純文本部分<p>和</p>標籤

我所需要的是:純文本的部分(以下部分1S)必須<p> & </p>標籤

目前的狀態我的字符串的&性能包圍:

  • 我字符串是用戶輸入。
  • 每個換行符(\ n)都被轉換爲<br>標籤。 2個或更多個<br>標籤 被替換爲<br><br>

字符串可以有3個部分。 下面的部分可以是任何順序和任意數量的數字。

part 1   part 2  part 3 
|------------| |-------------| |--------| 
| plain text | | <ul>..</ul> | | $$..$$ | 
|------------| |-------------| |--------| 
  • 在開始時和字符串的結尾沒有<br>標籤。 (修剪 與<br>掩模。)
  • 第2部分(<ul> .. </ul>部分)不具有與之前的本身 後<br>標籤;決不。
  • 第3部分($$ .. $$部分) 本身之前和之後沒有<br>標記;決不。
  • 確切地說有2個<br>標籤之間的純文本部分之間的標籤。 (因此 <br><br>可以純文本部分之間只存在。)
  • 明文部分可以或可以不具有這些內嵌 花式:<b></b><i></i>$..$

所以我想我需要的邏輯是匹配字符串,沒有$比賽[0]可與第2部分第3部分或匹配。換句話說,沒有$匹配[0]可以有第2部分或第3部分。

在此先感謝,最好的問候。

無關注意:由於mathjax存在$$和$使用。

+3

什麼你希望做的不僅僅是更多的「應用正則表達式爲字符串」。正則表達式不是你在涉及字符串的每一個問題上揮動的魔杖。 –

+0

您能否提供一些樣本輸入,您到目前爲止所嘗試的內容,您期望的結果應該是什麼,以及它與迄今爲止設法獲得的結果有什麼不同?另外,如果你有內聯樣式,那麼我認爲你不能再調用第1部分「純文本」 – apokryfos

+0

[你如何在PHP中解析和處理HTML/XML?](https://stackoverflow.com/問題/ 3577641 /你怎麼做,解析和進程的HTML-XML-in-php) – Calimero

回答

0

簡單的答案是:

preg_match('/<p>(.*?)<\/p>/', $oldString, $m); 
$newString=$m[1]; 

瞭解$ M []的含義請參見本手冊: http://php.net/manual/en/function.preg-match.php

的一點是,我不認爲找你去解決你的問題應該是(我猜)來「淨化」用戶輸入和/或格式化源提供的文本。 首先提出「純文本」這個表達方式的含義的缺乏(其意義何在?),並且推論,實際上不可能預測輸入內部所有可能的不需要代碼的情況。他們中的很多甚至可能非常危險。

當我面對「purifing」格式化文本(提供或不提供由用戶輸入),一個很好的出發點是這樣做得非常好,而且higly個性化的圖書館的問題: http://htmlpurifier.org/

我不明白你是否希望<p></p>標籤被抓取,在這種情況下:

$newString=$m[0];