加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP将圣经搜索字符串解析/爆炸成变量或标记

发布时间:2020-12-13 21:51:27 所属栏目:PHP教程 来源:网络整理
导读:我需要帮助用 PHP将圣经搜索字符串分解为变量或标记.我想得到这篇文章中提供的解决方案的明确用法示例: PHP preg_match bible scripture format. 编辑:章节和经文(从,到)是可选的. 例如:我希望能够拆分以下任何字符串: 'John 14:16–17'; //Book Chapter
我需要帮助用 PHP将圣经搜索字符串分解为变量或标记.我想得到这篇文章中提供的解决方案的明确用法示例: PHP preg_match bible scripture format.

编辑:章节和经文(从,到)是可选的.

例如:我希望能够拆分以下任何字符串:

'John 14:16–17'; //Book Chapter:FromVerse-ToVerse
'John 14:16'; //Book Chapter:FromVerse
'John 14'; //Book Chapter
'John'; //BOOK

下列:

<?php
$string = 'Exodus 1:3-7'; // Where Exodus is the book,1 the chapter number,3 the starting verse and 7 the ending verse. [Book Chapter:StartVerse-EndVerse]
$pattern = '/[ :-]/';
list( $book,$chapter,$from,$to ) = preg_split($pattern,$string );
echo $book;

允许我获取nbook名称:Exodus.我也可以用同样的方式检索章节号(echo $chapter)等.

我对这个解决方案的问题是当书名有多个单词时.
例子’撒母耳记下3:4-5′.例如,如果我回显$book,我会得到未定义的偏移量3或类似的错误.

在上面链接的帖子中建议这个正则表达式模式更完整:

/w+s?(d{1,2})?(:d{1,2})?([-–]d{1,2})?(,sd{1,2}[-–]d{1,2})?+$/

我想我的问题是如何使用这个模式或类似的模式来分割搜索字符串,如上所述.

这里讨论了类似的问题:PHP problems parsing a bible book string,但我在修改模式时遇到了一些麻烦.我不断得到如下错误:未定义的偏移量:3 …

我很感激你的帮助

解决方法

我不会用一个正则表达式做到这一点.

在阅读维基百科中的Bible-citation – Common formats section后,请参阅我的圣经解析器的想法:

$holy_str = 'Jonny 5:1,4-5,17,21;';

// split verses from book chapters
$parts = preg_split('/s*:s*/',trim($holy_str," ;"));

// init book
$book = array('name' => "",'chapter' => "",'verses' => array());

// $part[0] = book + chapter,if isset $part[1] is verses
if(isset($parts[0]))
{
  // 1.) get chapter
  if(preg_match('/d+s*$/',$parts[0],$out)) {
    $book['chapter'] = rtrim($out[0]);
  }

  // 2.) book name
  $book['name'] = trim(preg_replace('/d+s*$/',"",$parts[0]));
}

// 3.) verses
if(isset($parts[1])) {
  $book['verses'] = preg_split('~s*,s*~',$parts[1]);
}

print_r($book);

输出(test at eval.in):

Array
(
    [name] => Jonny
    [chapter] => 5
    [verses] => Array
        (
            [0] => 1
            [1] => 4-5
            [2] => 17
            [3] => 21
        )

)

无论在这里,约翰福音14:16或约翰福音12:3,16-17

另见regex faq.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读