2011-05-26 33 views
1

這是我的第一篇文章。我有一個文本(.txt)文件,其中包含來自多個來源的日記條目。我期望按日期,作者,標題等組織作品。 每個條目由「---」分隔。 每個日期都在「|」之後給出。 每位作者都在括號內。 標題位於條目頂部的括號之前。提取分隔符之間的文本 - PHP

因此,一個典型的入口看起來像:

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函數只適用於數組,這將無法如果每個數組元素是一個字符串。

我知道有幾種方法來解決這個問題,我似乎無法找到一個適用於我的情況。

+0

請上傳文件 – Danzan 2011-05-26 17:17:44

+1

的樣品我不知道你是什麼意思與「預浸功能僅適用於陣列」。 'preg_ *'函數對字符串有效,我認爲你需要'preg_match_all'。但也許我錯過了這一點。 – tjm 2011-05-26 17:24:12

回答

2

可能呢?

<?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 
) 
+1

如果以'^'爲前綴,這個正則表達式可能同時適用於'preg_match_all'整個輸入文件。 – mario 2011-05-26 18:16:10

0

對於像這樣Title (Author) - Citation | Date Added每個條目您可以:

  • 找到_(第一次出現在那裏下劃線是一個空間,然後你的標題是從0子到該索引
  • 找到()指數,以及與這些指數的子串是您的作者
  • 找到索引-__|其中下劃線是空格,並且與這些索引的子字符串是您的引用
  • 找到|_從指數的指數,其中下劃線是一個空間,串到最後一個字符將是你的約會
相關問題