php - 如何 preg_match 特定的圣经经文并检索每种情况下的书籍、章节和经文

标签 php regex

我读过很多关于 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/

相关文章:

java - 为什么此代码(使用正则表达式从 URL 中提取主机名)失败

java - 为什么 ^\s*$ 与 MULTILINE 不匹配 ""?

regex - 在 Go 中返回定义的字符范围

javascript - jQuery 验证澳大利亚电话号码

php - 如果我在调用 href 链接的同时调用 flash 函数,flash 函数是否始终会被执行?

php - mysql unhex() 不能在 linux 服务器上运行?

javascript - 将 Json 导入 html(表)

php - 在 ffmpeg 安装中无法连接到 GitHub.com 进行克隆

javascript - 使用 json_encode 输出换行符或新行?

android - 在android中使用sqlite的正则表达式