正则表达式问题

时间:2013-03-29 09:09:33

标签: php regex

我有下面的正则表达式,我试图把它分成两部分,虽然可能并不总是这两部分。

  

部门级别:非常低。类型:动物。

我正在使用下面的字符来打破它,但我需要能够通过字符串中断,识别级别和类型,以便它们可以返回到两个单独的数据库列中。例如,我需要检查字符串,看看是否有与“Section Level:{text}”匹配的内容。并将其插入数据库中的级别列,并且类型相同,我需要检查字符串中的“Type:{text}”。并将其插入到类型列中。

(?<=\:)(.*?)(?=\.)

我已经能够使用(\w*)(.*?)(?=\.)获得第一部分,但仍然不能在我的生活中获得第二部分。

2 个答案:

答案 0 :(得分:2)

以下正则表达式适合您:

(?=\w)(?:Section\s+Level:\s*([^.]+)\.)?\s*(?:Type:\s*([^.]+)\.)?

LevelType字段都作为可选字段。

现场演示:http://www.rubular.com/r/GpSHs69YHy

答案 1 :(得分:1)

我可能会使用strtok而不是正则表达式:

$string = 'Level: Very Low. Type: Animal.';

$parts = array();

for ($s = strtok($string, '.'); $s; $s = strtok('.'))
{

  $array = explode(':', $s);

  $parts[trim($array[0])] = trim($array[1]);

}

print_r($parts);

那会给你:

Array
(
    [Level] => Very Low
    [Type] => Animal
)

好处是,如果您添加了其他内容,请说Gender: Male,那么您就不必修改代码(很多)。

相关问题