PHP RegEx添加空间

时间:2014-08-04 11:17:58

标签: php regex

我有以下字符串:

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和书名之前的空格?

3 个答案:

答案 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);