首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将php "genesis 1:3-16“中的字符串拆分为"genesis","1","3","16”

将php "genesis 1:3-16“中的字符串拆分为"genesis","1","3","16”
EN

Stack Overflow用户
提问于 2015-07-28 07:57:13
回答 3查看 49关注 0票数 0

在php中,当用户保存文本时,我需要将字符串拆分为

"genesis1:3-16“==> "genesis","1","3","16”

“启示录2:3-5”==>“启示录”,"2","3","5“

条件是我需要根据符号":“、"-”和字符拆分的所有字符之间不会有空格。数字最多只能达到'999‘3位。

代码语言:javascript
复制
$sample = "genesis1:3-16";

//magic happens....

$book = "";        // genesis
$chapter = "";     // 1
$start_verse = ""; // 3
$end_verse = "";   //16

我对reg表达式的了解有限,不能只使用strpos和substr…

提前谢谢你

EN

回答 3

Stack Overflow用户

发布于 2015-07-28 08:14:04

我认为这个正则表达式可以实现您想要的功能:

代码语言:javascript
复制
([a-z]+)(\d{1,3}):(\d{1,3})-(\d{1,3})

演示(包含每个部分的功能说明):https://regex101.com/r/uP4gW6/1

PHP用法:

代码语言:javascript
复制
preg_match('~([a-z]+)(\d{1,3}):(\d{1,3})-(\d{1,3})~', 'genesis1:3-16', $data);
print_r($data);

输出:

代码语言:javascript
复制
Array
(
    [0] => genesis1:3-16
    [1] => genesis
    [2] => 1
    [3] => 3
    [4] => 16
)

对于preg_match0索引是找到的内容。后续的索引是每个捕获的组。

如果您有一组固定的书名,您可以用|分隔的列表替换[a-z]+,例如revelation|genesis|othername

票数 1
EN

Stack Overflow用户

发布于 2015-07-28 08:19:13

代码语言:javascript
复制
$parts = array();

preg_match('/^(.*?)\s*(\d+):(\d+)-(\d+)$/', $sample, $parts);

$book = $parts[1];

$chapter = $parts[2];

$startVerse = $parts[3];

$endVerse = $parts[4];
票数 0
EN

Stack Overflow用户

发布于 2015-07-28 11:00:47

您可以使用这个简单的模式

代码语言:javascript
复制
([a-zA-Z]+|\d{1,3})

Demo

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31665312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档