我读过很多关于 preg_matching 圣经经文的帖子,但似乎没有一个能满足我的要求。我正在尝试将以下带有点的诗句全部匹配到一个 preg_match 中,并检索书名、章节和诗句。
Hebrews 11.6
2 Chronicles 10.16
Romans 13.13
2 Kings 5.10
3 John 1.5
以上经文应恭敬输出
我做到了
if (preg_match('/[ ]{0,}([0-9]{1}[ ]{0,}[a-zA-ZàâäæáãåāèéêëęėēîïīįíìôōøõóòöœùûüūúÿçćčńñÀÂÄÆÁÃÅĀÈÉÊËĘĖĒÎÏĪĮÍÌÔŌØÕÓÒÖŒÙÛÜŪÚŸÇĆČŃÑ]*)[ ]{0,}([0-9]{1,3})[ ]{0,}:[ ]{0,}([0-9]{1,3})[ ]{0,}/', $bible_passage, $ourmatches))
{
$book = $ourmatches[1];
$chapter = $ourmatches[2];
$verse = $ourmatches[3];
echo "Book $book chapter $chapter verse $verse ";
}
这能够匹配这些诗句,但无法单独检索每本书和诗句。我想要得到以下结果
Book Hebrews Chapter 11 verse 6
Book 2 Chronicles Chapter 10 verse 16
Book Romans Chapter 13 verse 13
Book 2 Kings Chapter 5 verse 10
Book 3 John Chapter 1 verse 5
对于《希伯来书》11.6,我得到的是《希伯来书》第 1 章第 1 章第 6 节,而不是《希伯来书》第 1 章第 6 节
请问如何解决这个问题?
最佳答案
这可能就是您正在寻找的:
<?php
$data = [
"Hebrews 11.6",
"2 Chronicles 10.16",
"Romans 13.13",
"2 Kings 5.10",
"3 John 1.5",
];
array_walk($data, function($entry) {
preg_match('/(?:(\d+)\s+)?(\w+)\s+(\d+)\.(\d+)/', $entry, $capture);
list($volume, $book, $chapter, $verse) = array_slice($capture, 1);
echo "Book $book " . ($volume ? "volume $volume " : "") . "chapter $chapter verse $verse\n";
});
输出为:
Book Hebrews chapter 11 verse 6
Book Chronicles volume 2 chapter 10 verse 16
Book Romans chapter 13 verse 13
Book Kings volume 2 chapter 5 verse 10
Book John volume 3 chapter 1 verse 5
关于php - 如何 preg_match 特定的圣经经文并检索每种情况下的书籍、章节和经文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72487394/