PHP实现从文本提取带重音圣经卷名的经文到数组
PHP提取含重音圣经卷名的经文到数组
要实现从任意文本中提取符合格式的圣经经文并存入数组,核心是用UTF-8兼容的正则表达式匹配经文结构,同时完整保留带重音的卷名。
匹配规则梳理
需要覆盖的典型经文格式:
- 带数字前缀的多单词卷名(如
2 Chronicles、3 John) - 带重音符号的卷名(如
Genèse) - 章节格式:单章节(如
3)、章节-小节(如11:10)、逗号分隔的多段范围(如11:10-12, 15-17)
实现代码
<?php // 待处理的目标文本 $text = '某段文本中包含Genèse 11:10-12, 15-17, 19-20,还有分散在各处的其他经文,比如2 Chronicles 12:10-12, 15-17, 19-20和3 John 3等内容。'; // 适配UTF-8的正则表达式,匹配完整经文格式 $pattern = '/([\d]*\s*[A-Za-zÀ-ÿ]+(?:\s+[A-Za-zÀ-ÿ]+)*)\s+(\d+(?::\d+(?:-\d+)?(?:,\s*\d+(?:-\d+)?)*)?)/u'; // 提取所有匹配项 preg_match_all($pattern, $text, $matches); // 整理成目标数组 $verses = array_map('trim', $matches[0]); // 输出结果 print_r($verses); ?>
代码细节说明
- 正则末尾的
u修饰符:确保正则引擎以UTF-8模式解析,正确识别带重音的字符(如è) - 卷名匹配段:
[\d]*\s*[A-Za-zÀ-ÿ]+(?:\s+[A-Za-zÀ-ÿ]+)*支持带数字前缀、多单词、带重音的卷名 - 章节匹配段:
\d+(?::\d+(?:-\d+)?(?:,\s*\d+(?:-\d+)?)*)?覆盖单章节、章节-小节、多段范围等所有常见格式 array_map('trim', ...):清理匹配结果中可能存在的多余空格
运行结果
执行代码后会输出符合需求的数组:
Array ( [0] => Genèse 11:10-12, 15-17, 19-20 [1] => 2 Chronicles 12:10-12, 15-17, 19-20 [2] => 3 John 3 )
内容的提问来源于stack exchange,提问作者Man Of God
相关产品推荐
相关产品推荐

