1

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

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

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

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

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

4

2 回答 2

2

以下正则表达式应该适合您:

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

LevelType字段作为可选字段。

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

于 2013-03-29T09:19:55.787 回答
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那么您就不必修改代码(很多)。

于 2013-03-29T09:14:34.157 回答