php - 如何通过php将样式应用于字符串中包含的经文段落中的经文编号?
问题描述
我需要找到一种方法来识别经文段落中的经文编号,以便我可以将样式应用于它们(即颜色和上标)。我正在使用 php 并从 MySQL 数据库中提取段落。下面是我在关于我们页面上使用的一个小代码片段。
<span>What is your favorite passage in the bible? </span><?php echo $row[ "verse" ]; ?><br><?php echo $row[ "scripture" ]; ?>
verse
包含类似的东西Jeremiah 22:15-16
和scripture
包含类似的东西
15但美丽的香柏木宫殿不能造就伟大的国王!你的父亲约西亚也有很多吃的和喝的。但他在所有的交易中都是公正和正确的。这就是上帝赐福给他的原因。16 他伸张正义,扶助穷人和穷人,一切都顺利。这不就是认识我的意思吗?” 主说。
我希望能够分析任何字符串,并在将字符串回显到页面之前<span class="verse">
,在经文编号之前和之后应用 a。</span>
这样,输出看起来更像是这样的:
15但美丽的香柏木宫殿不能造就伟大的国王!你的父亲约西亚也有很多吃的和喝的。但他在所有的交易中都是公正和正确的。这就是上帝赐福给他的原因。16他为穷人和有需要的人伸张正义,帮助他,一切都很顺利。这不就是认识我的意思吗?” 主说。
<span class="verse">15</span>But a beautiful cedar palace does not make a great king! Your father, Josiah, also had plenty to eat and drink. But he was just and right in all his dealings. That is why God blessed him. <span class="verse">16</span>He gave justice and help to the poor and needy, and everything went well for him. Isn’t that what it means to know me?” says the Lord.
我一直无法在网上找到解决方案。我可以找到如何在字符串中搜索某个字符或子字符串,但不能找到如何在字符串中查找任何数字。我非常感谢您能提供的任何帮助。
解决方案
感谢@TemaniAfif 引导我朝着正确的方向前进,我能够找到解决方案。使用preg_match_all()
在字符串中搜索模式可以让我找到字符串中的经文编号,并将它们替换为每个经文编号之前和之后。该preg_match_all()
函数匹配字符串中所有出现的模式。
执行我的 sql 查询后,我运行了以下代码:
<?php
while ( $row = $query->fetch_assoc() ) {
$pattern = "/\d+/";
$passage = $row[ "scripture" ];
preg_match_all( $pattern, $passage, $matches, PREG_PATTERN_ORDER );
foreach ( $matches[0] as $match ) {
$passage = str_replace( $match, "<sup class='verse'>" . $match . "</sup>", $passage );
}
?>
<p>
<span><?php echo $row[ "verse" ]; ?></span><br><?php echo $passage; ?><br>
</p>
<?php } ?>
$pattern
定义我们试图在字符串中查找的字符串。在这种情况下,/\d+/
匹配字符串中任意数量的任意大小。它可以是一位或多位数字。如果我们只想匹配 1 位数字的经文,我们将删除+
.
$passage
只是我们正在搜索的输入字符串。在这种情况下,它是 SQL 表中的一行。
$matches
是 preg_match_all() 将返回它发现的任何匹配项的多维数组的名称。
PREG_PATTERN_ORDER
是一个标志,实际上不需要在那里,因为它是默认选项。PREG_PATTERN_ORDER
排序结果,因此它$matches[0]
是一个完整模式匹配的数组,$matches[1]
是一个由第一个带括号的子模式匹配的字符串数组,依此类推。
因为我们只关心模式匹配,所以我们foreach()
通过访问 $matches[0] 数组来循环遍历它们。在 中,foreach()
我们通过在每个匹配项<sup class='verse'>
之前和之后放置来替换字符串中的匹配项。</sup>
str_replace()
的第一个参数str_replace()
是我们的匹配。第二个是我们要替换匹配的内容。最后一个参数是主题,在我们的例子中是字符串。
我希望这可以帮助其他尝试完成相同或类似事情的人。
推荐阅读
- powershell - 在 PowerShell 中移动、加密和存储 .txt 和 .pc 文件到 .pgp
- ionic-framework - 如何在电容器 v3 实时重载中查看 console.log 输出
- c++ - 结构不使用 cout 打印
- python - Centos 操作系统上不同进程的 UUID 保持不变,但在 Windows 操作系统上工作正常(每个进程流的 UUID)
- node.js - 无法在 M1 Mac 上使用 Docker 安装Sharp
- php - Binance Pay:PHP cURL 出现“此请求的签名无效”错误
- java - CorrectLogin() 处未处理的异常类型 IOException;
- flutter - GetX 状态管理的导航错误:
- powershell - 我有powershell命令,其中每个内容都需要插入到aexcel的单元格中
- php - PHP:通过字符串动态获取带有 NESTED Optgroup 和选项的选择