我有下面的正则表达式,我试图把它分成两部分,虽然可能并不总是这两部分。
部门级别:非常低。类型:动物。
我正在使用下面的字符来打破它,但我需要能够通过字符串中断,识别级别和类型,以便它们可以返回到两个单独的数据库列中。例如,我需要检查字符串,看看是否有与“Section Level:{text}”匹配的内容。并将其插入数据库中的级别列,并且类型相同,我需要检查字符串中的“Type:{text}”。并将其插入到类型列中。
(?<=\:)(.*?)(?=\.)
我已经能够使用(\w*)(.*?)(?=\.)
获得第一部分,但仍然不能在我的生活中获得第二部分。
答案 0 :(得分:2)
以下正则表达式适合您:
(?=\w)(?:Section\s+Level:\s*([^.]+)\.)?\s*(?:Type:\s*([^.]+)\.)?
将Level
和Type
字段都作为可选字段。
答案 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
,那么您就不必修改代码(很多)。