我已经编写了一个正则表达式来获取数据库clob的前两段,它以HTML格式存储其内容。
我已经使用这些在线RegEx构建器/检查器here和here进行了检查,他们似乎都在做我想让他们做的事情(我已经略微改变了RegEx因为这些检查器可以处理我之后发现的新行格式。
然而,当我在我的PHP中使用它时,它似乎并不想得到我之后的小组,而是匹配所有内容。
以下是我的preg_replace
行:
$description = preg_replace('/(^.*?)((<p[^>]*>.*?<\/p>\s*){2})(.*)/', "$2", $description);
以下是我正在获取的内容格式的测试内容
<p>
Paragraph 1</p>
<p>
Paragraph 2</p>
<p>
Paragraph 3</p>
我看过this SO帖子,但没有帮助。
任何想法?
修改
正如其中一条评论所指出的那样,你不能在PHP中使用正则表达式HTML(不知道为什么,我并没有真正为此烦恼)。
现在我也打开了在PL / SQL中获取它的选项。
select
DBMS_LOB.substr(description, 32000, 1) /* How do I make this into a regular expression? */
from
blog_posts
答案 0 :(得分:1)
您可以查看PHP Simple DOM Parser
。按照他们的manual,您可以这样做:
$html = str_get_html('your html string');
foreach($html->find('p') as $element) //This should get all the paragraph elements in your string.
echo $element->plaintext. '<br>';
答案 1 :(得分:1)
您的输入包含换行符,因此您必须添加/(^.*?)((<p[^>]*>.*?<\/p>\s*){2})(.*)/s
修饰符:
.*
否则,Response.ClearContent();
Response.Write(@"<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">");
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Charset = "utf-8";
string tab = string.Empty;
Response.Write("<font style='font-size:11.0pt; font-family:Calibri;'>");
Response.Write("<BR><BR><BR>");
Response.Write("<Table border='1' bgColor='#ffffff' borderColor='#000000' cellSpacing='0' cellPadding='0' style='font-size:11.0pt; font-family:Calibri; background:white;'> <TR>");
foreach (DataColumn datacol in dt.Columns)
{
Response.Write("<Td style = "+"\"width:120px;\""+">");
Response.Write("<B>");
Response.Write(tab + datacol.ColumnName);
Response.Write("</B>");
Response.Write("</Td>");
}
Response.Write("</TR>");
foreach (DataRow dr in dt.Rows)
{
Response.Write("<TR>");
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write("<Td>");
Response.Write(tab + Convert.ToString(dr[j]));
Response.Write("</Td>");
}
Response.Write("</TR>");
}
HttpContext.Current.Response.Write("</Table>");
Response.Write("</font>");
Response.Flush();
Response.End();
会在换行符上中断,并且正则表达式不匹配。