我正在尝试使用以下代码使用R401.4
或R402.3.4
等分隔符拆分大字符串:
<?php
$chapter = "http://codes.iccsafe.org/app/book/content/2015-I-Codes/2015%20IRC%20HTML/Chapter%204.html";
$data = file_get_contents($chapter);
$split = preg_split('/(<b>[R]\d{3}[.][0-9])/' , $data, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($split);
?>
当我在PHP中运行时,我得到一个不正确的分割,如下所示,我得到了一个我想要的分割,然后是它而不是仅仅在每个R401.
部分:
[3] =&gt; R401.2 [4] =&gt;要求。基础施工应能够按照第R301和第R301节的规定容纳所有载荷 将产生的载荷传递到支撑土壤。填土 应设计,安装和支撑基础和基础 按照公认的工程实践进行测试。砾石填充 用作木材和预制混凝土基础的基础 符合第R403节。
[5] =&gt; R401.3 [6] =&gt;引流。地面排水应转向 风暴下水道运输工具或其他批准的收集点 不会造成危害。批次应分级以排出地表水 远离基础墙。等级应至少降至6英寸 在前10英尺(3048毫米)内(152毫米)。
例外:批次线,墙壁,斜坡或其他物理障碍 禁止在10英尺(3048毫米)范围内下降6英寸(152毫米),排水或 洼地的建造应确保排水远离洼地 结构体。在10英尺(3048毫米)范围内的不透水表面 建筑物基础应倾斜至少2% 建筑物。
[7] =&gt; R401.4 [8] =&gt;土壤测试。
但是当我在正常表达式测试网站regexer.com
上尝试我的表达时,它似乎正常工作。
我的regex
是否有问题,或者这与preg_match
中的php
有什么关系?
我正在寻找的是我的数组格式如下:
[3] =&gt; R401.2要求。基础施工应能够按照第R301和第R301节的规定容纳所有载荷 将产生的载荷传递到支撑土壤。填土 应设计,安装和支撑基础和基础 按照公认的工程实践进行测试。砾石填充 用作木材和预制混凝土基础的基础 符合第R403节。
[4] =&gt; R401.3排水。地面排水应转向 风暴下水道运输工具或其他批准的收集点 不会造成危害。批次应分级以排出地表水 远离基础墙。等级应至少降至6英寸 在前10英尺(3048毫米)内(152毫米)。
注意:我知道使用DOM
感谢。
答案 0 :(得分:0)
使用前瞻性断言解决了这个问题,如下所示:PHP preg_split while keeping delimiter at the start of array element
<?php
$chapter = "http://codes.iccsafe.org/app/book/content/2015-I-Codes/2015%20IRC%20HTML/Chapter%204.html";
$data = file_get_contents($chapter);
$split = preg_split('/(?=<b>[R]\d{3}[.][0-9])/' , $data, -1, PREG_SPLIT_DELIM_CAPTURE);
print_r($split);
?>
答案 1 :(得分:0)
因为您没有捕获任何内容,所以您不需要使用PREG_SPLIT_DELIM_CAPTURE
。
这是一个简化版本:
$data=file_get_contents('http://codes.iccsafe.org/app/book/content/2015-I-Codes/2015%20IRC%20HTML/Chapter%204.html');
$split=preg_split('/(?=<b>R\d{3}\.\d)/',$data);
var_export($split);
(您提供的网址不允许访问该文本,因此我无法提供演示/输出。)