在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 ...
提前谢谢
答案 0 :(得分:1)
我认为这个正则表达式可以实现你的目标:
([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
。
答案 1 :(得分:0)
$parts = array();
preg_match('/^(.*?)\s*(\d+):(\d+)-(\d+)$/', $sample, $parts);
$book = $parts[1];
$chapter = $parts[2];
$startVerse = $parts[3];
$endVerse = $parts[4];
答案 2 :(得分:0)