好的,我有一個文本文件,它會定期更改,我需要在屏幕上顯示並可能插入到數據庫中。文本格式如下:從文件中抓取文本以查看 - 使用非標準格式 - php
"Stranglehold"
Written by Ted Nugent
Performed by Ted Nugent
Courtesy of Epic Records
By Arrangement with
Sony Music Licensing
"Chateau Lafltte '59 Boogie"
Written by David Peverett
and Rod Price
Performed by Foghat
Courtesy of Rhino Entertainment
Company and Bearsville Records
By Arrangement with
Warner Special Products
我只需要歌名(引號之間的信息),這是誰寫的,誰它是由執行。正如你所看到的,由行寫成的行可能不止一行。
我通過查找問題,這是一個類似Scraping a plain text file with no HTML?,我能修改下面的解決方案https://stackoverflow.com/a/8432563/827449,這樣它至少會發現引號之間的信息,並把這些在數組中。然而,我不知道在哪裏以及如何將下一個preg_match語句寫入並執行,以便它將它添加到具有正確信息的數組中,假設我有正確的正則表達式。這是修改後的代碼。
<?php
$in_name = 'in.txt';
$in = fopen($in_name, 'r') or die();
function dump_record($r) {
print_r($r);
}
$current = array();
while ($line = fgets($fh)) {
/* Skip empty lines (any number of whitespaces is 'empty' */
if (preg_match('/^\s*$/', $line)) continue;
/* Search for 'things between quotes' stanzas */
if (preg_match('/(?<=\")(.*?)(?=\")/', $line, $start)) {
/* If we already parsed a record, this is the time to dump it */
if (!empty($current)) dump_record($current);
/* Let's start the new record */
$current = array('id' => $start[1]);
}
else if (preg_match('/^(.*):\s+(.*)\s*/', $line, $keyval)) {
/* Otherwise parse a plain 'key: value' stanza */
$current[ $keyval[1] ] = $keyval[2];
}
else {
error_log("parsing error: '$line'");
}
}
/* Don't forget to dump the last parsed record, situation
* we only detect at EOF (end of file) */
if (!empty($current)) dump_record($current);
fclose($in);
任何幫助將是偉大的,因爲我現在在我的頭上,我有限的PHP和正則表達式的知識。
如果該文件的格式是不會隨時更改很快我開始與不具有任何_regex_和在絕對必要時只鑽進一個解決方案。 – quickshiftin 2012-02-21 08:59:17
有沒有一個規則背後的線休息? 「犀牛娛樂 公司」分爲兩行 – Eric 2012-02-21 14:40:11
另外,如果我的公司名稱包含單詞「Courtesy」或「Written」,該怎麼辦? – Eric 2012-02-21 14:41:26