2012-02-25 10 views
-2

私は老人ホームのために働き、彼らは自分のウェブサイトに表示したいと思う大量の聖句を持っています。私は300以上のテキスト文書を受け取りました。データを手作業ではなく、どのようにインポートするのか、いくつかご希望でした。どうすればこのようなデータを解析できますか?

1. Matthew 8:1-4: Blah blah blah blah. 
2. Mark 1:32-34: Blah blah. Blah, blah; blah. 
. 
. 

どうすればいいですか?私はPHPを使用しています。

Matthew 8:1-4: 
Blah blah blah blah. 
+0

? – shanabus

+0

聖書の名前は、最初の完全な終わりと2番目のコロンの間にあるようです。テキストは2番目のコロンの後にあります。あなたはそれを解析するために正規表現を必要とすべきではありません。 – JJJ

+0

解析の結果であると予想されるものと、自分で試したものについての情報が参考になるかもしれません。 – Repox

答えて

2
$matches = array(); 
preg_match('~^[0-9]+\. ([^0-9]+ (?:[0-9]+:)?[0-9]+-[0-9]+:) (.+)$~', trim($line), $matches); 
var_dump($matches); 

テストされていないが、それを実行する必要があります。

例えば、私は、各ラインからのデータの2枚が必要になります。

+0

それを見ると、私に頭痛を与えます。それは次のような場合にはうまくいかない:56. 2 John 2-3:Blah blah。しかし、私はそれを自分自身でやろうとしています。 – user781439

+1

これは '2-3'を期待することはないが、常に' 123:2-3'(質問の中で述べたように)だからです。 – KingCrunch

+0

私は知っている、私は質問にそのケースを追加することを忘れて、あなたはそれがうまく動作します。私が必要とするものに対してあなたの解決策を微調整します。私は助けに感謝します。 – user781439

0

それが爆発するのではなく正規表現で行うことができます。

$first_explosion = explode($line,"."); 
$interesting_data = $first_explosion[1]; #We ignore the number before the dot 
$parsed_data = explode($interesting_data, ":",2); #Do just 2 "explodes", anything after the second ":" will be left alone 
#$parsed_data is an array, element 0 is "Matthew 8", element 1 is "34-10", element 2 contains the rest 

その後、parsed_data配列が必要なもので終わるために操作することができます。

0

各ラインを分割する簡単な方法は次のようになります。

$yourObjectArray = explode(".", $theLine); 
// now $yourObjectArray[0] is the line number, $yourObjectArray[1] is the content 

次に、あなたが最後:を見つけて、そこにそれを分割するために、このような関数を使用することができます。

function strlastpos($haystack, $needle) { 
    # flip both strings around and search, then adjust position based on string lengths 
    return strlen($haystack) - strlen($needle) - strpos(strrev($haystack), strrev($needle)); 
} 

$bookArray = split($yourObjectArray[1], strlaspost($yourObjectArray[1], ":")); 
// now $bookArray[0] is your chapter/book information and $bookArray[1] is the content (blah blah) 

explode文書はここで見つけることができます - http://www.php.net/manual/en/function.explode.php

1

あなたがやって見ているものを行うためにsplit()(またはexplode())を使用します。それはmisfindますので、各ラインのフォーマット自体は、最初.と最初:を探している、この中で、非常に重要です、注意してください

1.Matthew 8: 1-4: Blah Blah Blah. 

正直に言うと、私はあなたが持つほうが良いと思いますここで正規表現。

$kvs = array(); 
$str = " 
1. Matthew 8:1-4: Blah blah blah blah Blah: blah. 
2. Mark 1:32-34: Blah blah. Blah, blah; blah. 
3. Mark 2:2-4: Blah blah. Blah, blah; blah. 
"; 

$split = split("\n", $str); 
$c_split = count($split); 

print_r($split); 

for ($i = 0; $i < $c_split; $i++) { 
    if (trim($split[$i]) != '') { 
     $key = substr($split[$i], strpos($split[$i], '. ') + 2, strpos($split[$i], ': ') - 3); 
     $value = substr($split[$i], strpos($split[$i], ': ') + 2); 

     $kvs[$key] = $value; 
    } 
} 

print_r($kvs); 

http://codepad.org/hq2LkMlr

はあなたに与える:

あなたが解析しようとしているもの
Array 
(
    [0] => 
    [1] => 1. Matthew 8:1-4: Blah blah blah blah Blah: blah. 
    [2] => 2. Mark 1:32-34: Blah blah. Blah, blah; blah. 
    [3] => 3. Mark 2:2-4: Blah blah. Blah, blah; blah. 
    [4] => 
) 
Array 
(
    [Matthew 8:1-4] => Blah blah blah blah Blah: blah. 
    [Mark 1:32-34] => Blah blah. Blah, blah; blah. 
    [Mark 2:2-4] => Blah blah. Blah, blah; blah. 
) 
関連する問題