RegEx替换不能在PHP中工作

时间:2015-07-14 08:30:03

标签: php regex plsql

我已经编写了一个正则表达式来获取数据库clob的前两段,它以HTML格式存储其内容。

我已经使用这些在线RegEx构建器/检查器herehere进行了检查,他们似乎都在做我想让他们做的事情(我已经略微改变了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

2 个答案:

答案 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(); 会在换行符上中断,并且正则表达式不匹配。