我试图使用像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 => R 401.2 4 =>要求。地基施工应能按照R301截面容纳所有荷载,并将由此产生的荷载传递给支护土。支持基础和基础的填土应按照公认的工程惯例进行设计、安装和测试。用作木料和预制混凝土地基的碎石填料应符合R403节的要求。 5 => R 401.3 6 =>引流。地面排水应转用于风暴、下水道、运输工具或其他不造成危险的其他认可收集点。地块应分级,以便将地表水从地基墙中抽走。该等级须在首10呎(3048毫米)内最少下降6吋(152毫米)。 例外情况:如地段线、墙壁、斜坡或其他物理屏障禁止在10呎(3048毫米)范围内落6吋(152毫米),则须建造排水渠或污水渠,以确保排水系统远离该构筑物。离建筑物基础10英尺(3048毫米)以内的不透水表面,应至少离建筑物2%的距离。 7 => R 401.4 8 =>土壤试验。
然而,当我在像regexer.com这样的正则表达式测试网站上尝试表达式时,它似乎是正确的。
http://regexr.com/3ds6l
我的regex有什么问题吗?还是与preg_match in php有关?
我正在寻找的是将我的数组格式化如下:
3 => R401.2要求。地基施工应能按照R301截面容纳所有荷载,并将由此产生的荷载传递给支护土。支持基础和基础的填土应按照公认的工程惯例进行设计、安装和测试。用作木料和预制混凝土地基的碎石填料应符合R403节的要求。 4 => R401.3引流。地面排水应转用于风暴、下水道、运输工具或其他不造成危险的其他认可收集点。地块应分级,以便将地表水从地基墙中抽走。该等级须在首10呎(3048毫米)内降至最少6吋(152毫米)。
注意:我知道使用DOM解析页面通常更好
谢谢。
发布于 2016-07-23 03:22:30
使用前瞻性断言解决此问题,如在这里所做的: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);
?>发布于 2017-08-31 16:17:52
因为您没有捕获任何内容,所以不需要使用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);(您提供的url不允许访问文本,因此我无法提供演示/输出。)
https://stackoverflow.com/questions/38537707
复制相似问题