使用<p>和</p>标记

时间:2017-10-16 13:47:39

标签: php regex

我的要求高度超出了我的基本正则表达式知识。我甚至无法尝试任何事情。你可以帮我解决$ pattern吗?

我需要的是:纯文本部分(下面的第1部分)必须附在<p>&amp; </p>代码

当前状态&amp;我的字符串的属性是:

  • 我的字符串是用户输入。
  • 每个换行符(\ 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>$..$

所以我认为我需要的逻辑是匹配没有$ matches [0]可以匹配第2部分或第3部分的字符串。换句话说,没有$ matches [0]可以包含第2部分或第3部分。

提前致谢,最诚挚的问候。

无关紧要的说明:因为mathjax而存在$$和$使用。

1 个答案:

答案 0 :(得分:0)

简单的答案是:

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

了解$ m []的含义参考手册: http://php.net/manual/en/function.preg-match.php

关键是我不认为你会解决你应该(我猜)到#34;净化&#34;由用户输入和/或格式化源提供的文本。 首先,缺乏表达的含义&#34;纯文本&#34; (什么是exctly意味着什么?)并且,概括而言,几乎不可能预测输入中所有可能的不需要的代码案例......其中许多代码甚至可能非常危险。

当我面对&#34; purifing&#34;一个格式化的文本(由用户输入提供或不提供)一个很好的起点是这个做得很好,高度个性化的库: http://htmlpurifier.org/

我不明白你是否想要抓住<p></p>标签,在这种情况下:

$newString=$m[0];