在php中,当用户保存文本时,我需要将字符串拆分为
"genesis1:3-16“==> "genesis","1","3","16”
“启示录2:3-5”==>“启示录”,"2","3","5“
条件是我需要根据符号":“、"-”和字符拆分的所有字符之间不会有空格。数字最多只能达到'999‘3位。
$sample = "genesis1:3-16";
//magic happens....
$book = ""; // genesis
$chapter = ""; // 1
$start_verse = ""; // 3
$end_verse = ""; //16我对reg表达式的了解有限,不能只使用strpos和substr…
提前谢谢你
发布于 2015-07-28 08:14:04
我认为这个正则表达式可以实现您想要的功能:
([a-z]+)(\d{1,3}):(\d{1,3})-(\d{1,3})演示(包含每个部分的功能说明):https://regex101.com/r/uP4gW6/1
PHP用法:
preg_match('~([a-z]+)(\d{1,3}):(\d{1,3})-(\d{1,3})~', 'genesis1:3-16', $data);
print_r($data);输出:
Array
(
[0] => genesis1:3-16
[1] => genesis
[2] => 1
[3] => 3
[4] => 16
)对于preg_match,0索引是找到的内容。后续的索引是每个捕获的组。
如果您有一组固定的书名,您可以用|分隔的列表替换[a-z]+,例如revelation|genesis|othername。
发布于 2015-07-28 08:19:13
$parts = array();
preg_match('/^(.*?)\s*(\d+):(\d+)-(\d+)$/', $sample, $parts);
$book = $parts[1];
$chapter = $parts[2];
$startVerse = $parts[3];
$endVerse = $parts[4];发布于 2015-07-28 11:00:47
https://stackoverflow.com/questions/31665312
复制相似问题