【问题标题】:Split a string with letters numbers and fullstops with preg_split使用 preg_split 拆分带有字母数字和句号的字符串
【发布时间】:2016-11-27 00:31:54
【问题描述】:

我正在尝试使用 R401.4R402.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] => R401.2 [4] => 要求。基础结构应能够根据第 R301 节和 将产生的荷载传递给支撑土壤。填土 应设计、安装和安装支撑基础和基础 根据公认的工程实践进行测试。砾石填充 用作木材和预制混凝土基础的基础 遵守第 R403 节。

[5] => R401.3 [6] => 排水。地表排水应改道 雨水渠运输工具或其他经批准的收集点 不会造成危险。地块应分级以排放地表水 远离基础墙。等级应至少下降 6 英寸 (152 毫米)在前 10 英尺(3048 毫米)内。

例外:地段线、墙壁、斜坡或其他物理障碍 禁止在 10 英尺 (3048 毫米)、排水管或 洼地的建造应确保排水远离 结构体。 10 英尺(3048 毫米)范围内的不透水表面 建筑地基应至少倾斜 2% 建筑物。

[7] => R401.4 [8] => 土壤测试。

但是,当我在像 regexer.com 这样的正则表达式测试网站上尝试我的表达式时,它似乎可以正常工作。

http://regexr.com/3ds6l

我的regex 有问题还是与php 中的preg_match 有关?

我正在寻找的是我的数组格式如下:

[3] => R401.2 要求。基础结构应能够根据第 R301 节和 将产生的荷载传递给支撑土壤。填土 应设计、安装和安装支撑基础和基础 根据公认的工程实践进行测试。砾石填充 用作木材和预制混凝土基础的基础 遵守第 R403 节。

[4] => R401.3 排水。地表排水应改道 雨水渠运输工具或其他经批准的收集点 不会造成危险。地段应分级以排放地表水 远离基础墙。等级应至少下降 6 英寸 (152 毫米)在前 10 英尺(3048 毫米)内。

注意:我知道使用 DOM 解析页面通常会更好

谢谢。

【问题讨论】:

  • 搜索PREG_SPLIT_DELIM_CAPTURE (并使用DOM)

标签: php regex preg-split


【解决方案1】:

使用前瞻断言解决了这个问题,如下所示: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);
?>

【讨论】:

    【解决方案2】:

    因为你没有捕获任何东西,所以你不需要使用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);
    

    (您提供的网址不允许访问文本,因此我无法提供演示/输出。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2019-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多