【问题标题】:Catch specifics values with php使用 php 捕获特定值
【发布时间】:2015-09-03 17:02:58
【问题描述】:

我需要用php捕捉/分离一些特定的数据值。似乎在 php 中诸如 preg_match() 之类的东西。但没有成功。我将展示我正在处理的数据的一小部分。原始文件有超过32万个字母。

129/09/20031820252310112414060213090516030,005BA15446454880725759349.765,82689,8410,004,002,000,000,000,00PRSPSPSP206/10/20032315050412162006111924010913070,001SP184623281252478188596.323,701.388,9510,004,002,000,000,000,00313/10/20032023120806010711140416100917240,002SP158689796244608211400.623,702.173,3610,004,002,000,000,000,00SP420/10/20031605252423081202171801100419130,001MT2589569123912706657902.226,021.498,7210,004,002,000,000,000,00527/10/20031513200211240916042325120819010,002BA47214736195636860992380.017,55687,4910,004,002,000,000,000,00MS603/11/20032319010507211610152506021204170,002RJ39314242162320888301489.140,061.066,8310,004,002,000,000,000,00RS

我需要将这些数据分开,就像那样。可以是数组,也可以是 .txt 文件。

29/09/2003182025231011241406021309051603,
06/10/2003231505041216200611192401091307,
13/10/2003202312080601071114041610091724,
20/10/2003160525242308120217180110041913,
27/10/2003151320021124091604232512081901,
03/11/2003231901050721161015250602120417,

这些数据有一个模式来获取值。值 /20 将是​​关键,因此他可以选择循环值,因为它是此数据的默认值。

如果 preg_match() 起作用了,它会根据值/20取值,会使用 substr() 正负来选择选择每个找到的值的范围,这样找到的这个数量之后就是在数组或 .txt 文件上播放。我已经尝试过array_search(),但它似乎带来了布尔响应(TRUE 或 FALSE)。我也尝试使用explode,但是值/20 消失了,因此失去了搜索的回车键。

我真的迷路了,我正在寻找几天,并认为有人可以给我一条解决问题的方法。 php中是否有其他命令可以帮助我解决这个问题?

【问题讨论】:

  • 这可能是简单的 CSV 数据吗?如果没有,你知道确切的结构吗?
  • @JensA.Koch 数据来自一个 .html 文件,所以我在 php 中选择了这个文件,并使用 strip_tags() 获取了所有标签,只留下数据值,所以把它全部在一起,因为我使用 str_replace() 的数字之间有很多空白空间。最后我把它放在一个 .txt 文件中

标签: php arrays string


【解决方案1】:

希望对你有帮助

$exp = "/[\\d]{2}[\\/][\\d]{2}[\\/](.*?),/"; 
$data = "129/09/20031820252310112414060213090516030,005BA15446454880725759349.765,82689,8410,004,002,000,000,000,00PRSPSPSP206/10/20032315050412162006111924010913070,001SP184623281252478188596.323,701.388,9510,004,002,000,000,000,00313/10/20032023120806010711140416100917240,002SP158689796244608211400.623,702.173,3610,004,002,000,000,000,00SP420/10/20031605252423081202171801100419130,001MT2589569123912706657902.226,021.498,7210,004,002,000,000,000,00527/10/20031513200211240916042325120819010,002BA47214736195636860992380.017,55687,4910,004,002,000,000,000,00MS603/11/20032319010507211610152506021204170,002RJ39314242162320888301489.140,061.066,8310,004,002,000,000,000,00RS\n"; 

preg_match_all($exp, $data, $result);
print_r($result);

输出:

Array
(
    [0] => Array
        (
            [0] => 29/09/20031820252310112414060213090516030,
            [1] => 06/10/20032315050412162006111924010913070,
            [2] => 13/10/20032023120806010711140416100917240,
            [3] => 20/10/20031605252423081202171801100419130,
            [4] => 27/10/20031513200211240916042325120819010,
            [5] => 03/11/20032319010507211610152506021204170,
        )

    [1] => Array
        (
            [0] => 20031820252310112414060213090516030
            [1] => 20032315050412162006111924010913070
            [2] => 20032023120806010711140416100917240
            [3] => 20031605252423081202171801100419130
            [4] => 20031513200211240916042325120819010
            [5] => 20032319010507211610152506021204170
        )

)

【讨论】:

  • 这行得通。我不知道 preg_match() 会那么复杂,甚至还有 preg_match_all()。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
相关资源
最近更新 更多