【问题标题】:need a string for regular expression to preg_split records into array [closed]需要一个用于正则表达式的字符串来将记录拆分为数组 [关闭]
【发布时间】:2014-06-14 11:28:50
【问题描述】:
$source="<p><b>Lal, Vaninm</b></p>
<p><b>Vice President &amp;</b></p>
<p><b>General Manager</b></p>
<p>Company 1 Inc.</p>
<p>PO Box 123456</p>
<p>salt Lake1, 00111-3333</p>
<p>111-111-111 / F: 111-111-111</p>
<p>info1@site1.com</p>
<p><b>Andrus, Reed </b></p>
<p><b>Manager</b></p>
<p>Company 2 Inc.</p>
<p>Monada, Suite 222</p>
<p>J , Lousiana 2222</p>
<p>222-222-222 / F: 222-222-222</p>
<p>info2@site2.com</p>
<p><b>Sharma, John L.</b></p>
<p><b>Senior Property Manager</b></p>
<p>Company 3  Ltd.</p>
<p>PO Box 3333</p>
<p>Grand Cinema, Layman Islands</p>
<p>FGB 333</p>
<p>333-333-333</p>
<p>info3@site3.com</p>
<p><b>Lucky, Philip S</b></p>
<p>Life Member</p>
<p>Company 4 Inc.</p>
<p>Battelsville, Oklahoma 74000</p>
<p>444-444-444</p>
<p><b>Berry, Richard B, RPA, CPM</b></p>";
$records = preg_split ("@\<p\>\<b\>(.*?)(\<p\>(.*)\</p\>\<p\>\<b\>)@s", $source); 
var_dump($records);

数组必须包含四个记录。 标签内包含的数据是没有意义的。 我是正则表达式的新手。我试过如上。请为此建议正则表达式。提前致谢。

我认为&lt;p&gt;&lt;b&gt; ....&lt;p&gt;...&lt;/p&gt;&lt;p&gt;&lt;b&gt; 标识了一条记录。但我无法做出所需的表达。

【问题讨论】:

  • 如果你需要一个正则表达式为什么不写一个?
  • 如果你使用标记,不要使用正则表达式,使用DOM
  • 嗨,马克,我为此尝试了简单的 html dom。但是html文件太大了。
  • @user3740168 你的文件有多大?
  • 文件大小为 35 mb。

标签: php regex for-loop records


【解决方案1】:

关于使用正则表达式解析 html 的所有免责声明,以下正则表达式将正确拆分您的输入。

版本 1:只有换行符的文件(unix、osx)

(?=(?<=^|((?<!</b>)</p>\n))<p><b>)

版本 2:带有回车和换行符的文件(windows)

(?=(?<=^|((?<!</b>)</p>\r\n))<p><b>)

因此,如果你使用第一个,你可以这样写:

$records = preg_split('~(?=(?<=^|((?<!</b>)</p>\n))<p><b>)~', $str);

请注意,由于最后一行,实际上有五条记录:

<p><b>Berry, Richard B, RPA, CPM</b></p>";

它是如何工作的?

具有前瞻和后瞻功能。这是一个“零宽度”匹配,只查找某个位置。

  • (?= 前瞻断言&lt;p&gt;&lt;b&gt; 后面的当前位置...
  • 只要&lt;p&gt;&lt;b&gt; 前面有(向后看(?&lt;=)字符串^&lt;/p&gt;\n 前面没有&lt;/b&gt; 的开头(负向后看(?&lt;!&lt;/b&gt;)

享受吧!

【讨论】:

  • 谢谢zx81!它很有魅力。
  • @Romi 很高兴它有效,感谢您告诉我。 :) 仅供参考,当我回答时,我已经对你有趣的问题投了赞成票,不能再做一次,你看不到它,但问题分数是 -4/+1 :(
猜你喜欢
  • 2018-03-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多