我在养老院工作,他们想要在他们的网站上出现大量精选的经文。我收到了一份包含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 :(得分:2)
$matches = array();
preg_match('~^[0-9]+\. ([^0-9]+ (?:[0-9]+:)?[0-9]+-[0-9]+:) (.+)$~', trim($line), $matches);
var_dump($matches);
未经测试,但应该这样做。
答案 1 :(得分:1)
使用split()
(或explode()
)执行您正在执行的操作。请注意,每行的格式化本身至关重要,因为这是寻找第一个.
和第一个:
,因此它会错误发现
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);
给你:
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.
)
答案 2 :(得分: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数组,最终得到您需要的内容。
答案 3 :(得分: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