我在 SO 上閱讀了很多關于 preg_matching 圣經經文的帖子,但似乎沒有一個符合我的要求。我正在嘗試將以下經文與一個 preg_match 中的 dot all 進行匹配,并檢索章節和經文的書名。
希伯來書 11.6
2 編年史 10.16
羅馬書 13.13
2 國王 5.10
約翰三書 1.5
上面的經文應該恭敬地輸出
我做了
if (preg_match('/[ ]{0,}([0-9]{1}[ ]{0,}[a-zA-Zàa??á??āèéê???ē??ī?íì?ō??óò??ù?üūú????ń?à???á??āèéê???ē??ī?íì?ō??óò??ù?üūú??????]*)[ ]{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 ";
}
這能夠匹配那些經文,但不能用經文單獨檢索每本書。我想得到以下結果
希伯來書 11 章 6 節
書2 歷代志10 章 16 節
羅馬書 13 章 13 節
書2 王第 5 章第 10 節
約翰福音 3章1 節 5
對于希伯來書 11.6,我得到的是第 1 章第 1 章第 6 節,而不是希伯來書第 1 章第 6 節
請問這個怎么解決?
uj5u.com熱心網友回復:
這可能是您正在尋找的:
<?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";
});
輸出是:
本書希伯來書11章6節
編年史第 2 卷第 10 節第 16 節
本書羅馬書第 13 章第 13 節
書王第 2 章第 5 節第 10 節
約翰書第 3 卷第 1 節第 5 節
uj5u.com熱心網友回復:
您可以使用
<?php
$text = 'Hebrews 11.6
2 Chronicles 10.16
Romans 13.13
2 Kings 5.10
3 John 1.5';
if (preg_match_all('~^(.*?)\h*(\d )\.(\d )$~m', $text, $ms, PREG_SET_ORDER, 0)) {
foreach ($ms as $m) {
$book=$m[1];
$chapter=$m[2];
$verse=$m[3];
echo "Book $book chapter $chapter verse $verse\n";
}
}
請參閱PHP 演示和正則運算式演示。
輸出:
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
正則運算式詳細資訊:
^- 一行的開始(由于m標志)(.*?)- 任何文本,盡可能短\h*- 零個或多個水平白人[ace(\d )- 第 2 組:一位或多位數字\.- 一個點(\d )- 第 3 組:一位或多位數字$- 字串結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485687.html
