2016-07-23 78 views
0

我試圖使用像R401.4R402.3.4分隔符使用下面的代碼,以分割一個大的字符串:拆分字母數字和fullstops以使preg_split字符串

<?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] => R401.2 [4] =>要求。根據R301和 的規定,基礎施工應能夠承受所有荷載,將所產生的荷載傳遞到支撐土上。填充土壤 支持地基和基礎的設計,安裝和按照公認的工程實踐進行測試。礫石填料 用作木材和預製混凝土基礎的基礎應符合第R403部分的要求 。

[5] => R401.3 [6] =>排水。地表排水應改道至 雨水渠運輸或其他批准的收集點,不會造成危害。應將地塊分級,使其遠離地基牆排出地表水 。在最初的10英尺(3048毫米)範圍內,等級至少應爲6英寸(152毫米)。

例外:凡須以大量線,牆壁,斜坡或 禁止10英尺(3048毫米),排水管或 窪地內落下的6英寸(152 mm)的其它物理屏障,以確保排水從 結構遠。 建築物基礎的10英尺(3048毫米)以內的不透水錶面應與建築物的 相差至少2%。

[7] => R401.4 [8] =>土壤測試。

但是,當我在像regexer.com這樣的正則表達式測試網站上嘗試我的表達時,它似乎能夠正常工作。

http://regexr.com/3ds6l

有什麼毛病我regex或者這是否有東西在phppreg_match

我在找的是我的數組被格式化這樣的:

[3] => R401.2要求。根據R301和 的規定,基礎施工應能夠承受所有荷載,將所產生的荷載傳遞到支撐土上。填充土壤 支持地基和基礎的設計,安裝和按照公認的工程實踐進行測試。礫石填料 用作木材和預製混凝土基礎的基礎應符合第R403部分的要求 。

[4] => R401.3排水。地表排水應改道至 雨水渠運輸或其他批准的收集點,不會造成危害。應將地塊分級,使其遠離地基牆排出地表水 。在最初的10英尺(3048毫米)範圍內,等級至少應爲6英寸(152毫米)。

注:我知道它通常更好地解析使用DOM

感謝頁面。

+0

搜索關於'PREG_SPLIT_DELIM_CAPTURE' *(並使用DOM)* –

回答

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); 
?> 
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); 

(您提供的網址沒有允許訪問的文本,所以我無法提供一個demo /輸出)