【问题标题】:Extracting text between delimiters - PHP提取分隔符之间的文本 - PHP
【发布时间】:2011-05-26 17:14:32
【问题描述】:

这是我的第一篇文章。我有一个文本 (.txt) 文件,其中包含来自多个来源的日记条目。我希望按日期、作者、标题等组织条目。 每个条目由“---”分隔。 每个日期都在“|”之后给出。 每个作者都在括号中。 标题位于条目顶部的括号之前。

所以一个典型的条目看起来像:

Title (Author) - Citation | Date Added

Entry
---

到目前为止,这是我的代码:

$text = file_get_contents('./uploads/My Clippings.txt');

$entries = explode("==========",$text);

$count = count($entries);
echo "<h3>You have $count entries on your Kindle!</h3><br />";

foreach ($entries as $entry) {
echo $entry . "<br /><br />";
}

所以现在我有一个由“---”分隔符分隔的条目数组。 接下来我想按作者、标题等拆分数组中的每个字符串...

问题是 preg 函数只适用于数组,如果每个数组元素都是字符串,这将不起作用。

我知道有几种方法可以解决这个问题,但我似乎找不到适合我的方法。

【问题讨论】:

  • 我不确定“preg 函数仅适用于数组”是什么意思。 preg_* 函数适用于字符串,我认为您需要 preg_match_all。但也许我错过了重点。

标签: php arrays delimiter text-extraction


【解决方案1】:

可能是这个?

<?php
    $string = 'Dune 2000 (Frank Herbert) - Some Citation | 2011-05-25';
    $pattern = '/(.*) \((.*)\) \- (.*) \| (.*)/';
    preg_match($pattern, $string, $matches);

    print_r($matches);
?>

输出:

Array
(
    [0] => Dune 2000 (Frank Herbert) - Some Citation | 2011-05-25
    [1] => Dune 2000
    [2] => Frank Herbert
    [3] => Some Citation
    [4] => 2011-05-25
)

【讨论】:

  • 如果以^ 为前缀,则此正则表达式可能也适用于preg_match_all 一次整个输入文件。
【解决方案2】:

对于每个像 Title (Author) - Citation | Date Added 这样的条目,您会:

  • 找到第一个出现的_(,其中下划线是一个空格,然后你的标题是从0到那个索引的子字符串
  • 找到() 索引,这些索引的子字符串就是你的作者
  • 找到-__| 的索引,其中下划线是一个空格,带有这些索引的子字符串就是你的引用
  • 找到|_ 的索引,其中下划线是一个空格,从该索引到最后一个字符的子字符串就是您的日期

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多