我有以下字符串:
John 1:9
以及以下php代码:
$parts = preg_split('/[^a-z]/i', $a,2);
var_dump($parts);
它返回以下结果(正如我所料)
array (size=2)
0 => string 'John' (length=4)
1 => string '1:9' (length=3)
然而,我可能想要这本书“约翰一书1:9”并且它无法检测“1约翰”。如何更改正则表达式代码以接受数字1-4和书名之前的空格?
答案 0 :(得分:1)
怎么样:
preg_match('/^((?:\d{1,4} )?\S+) (.+)$/', $string, $matches);
图书名称(带有可选编号)位于$matches[1]
,其余位于$matches[2]
答案 1 :(得分:1)
而不是仅仅拆分,你需要编写一个正则表达式来匹配每个部分。
您可以使用以下内容:
/^((?:[1-4] )?[a-z]+) ([\d:]*)$/
然后您使用preg_match
,如下所示:
preg_match('/^((?:[1-4] )?[a-z]+) ([\d:]*)$/', $string, $parts);
答案 2 :(得分:0)
我认为最简单的方法是检查第一个结果是否为数字,如果是,请加入前两个键。
$parts = preg_split('/[^a-z]/i', $a);
if (is_numeric($parts[0])) {
$parts[0] = array_shift($parts) . ' ' . $parts[0];
}
var_dump($parts);