Php 正则表达式问题

Php 正则表达式问题,php,regex,Php,Regex,我有下面的正则表达式,我试图把它分成两部分,但可能并不总是有这两部分 部门级别:非常低。类型:动物 我使用下面的代码按字符分隔,但我需要能够按字符串分隔,识别级别和类型,以便将它们返回到两个单独的数据库列中。例如,我需要检查字符串,看看是否有任何内容与'Section Level:{text}'匹配,并将其插入数据库的Level列中,对于type,我需要检查字符串'type:{text}'。并将其插入type列中 (?<=\:)(.*?)(?=\.) (?我可能会使用正则表达式,而不是正

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

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

我使用下面的代码按字符分隔,但我需要能够按字符串分隔,识别级别和类型,以便将它们返回到两个单独的数据库列中。例如,我需要检查字符串,看看是否有任何内容与'Section Level:{text}'匹配,并将其插入数据库的Level列中,对于type,我需要检查字符串'type:{text}'。并将其插入type列中

(?<=\:)(.*?)(?=\.)
(?我可能会使用正则表达式,而不是正则表达式:

$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
,那么您就不必对代码进行太多修改了。

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

(?=\w)(?:Section\s+Level:\s*([^.]+)\.)?\s*(?:Type:\s*([^.]+)\.)?
级别
类型
字段作为可选字段


现场演示:什么不起作用?看起来你希望我们为你编写代码。就像我在帖子中说的,我需要根据“级别:”和下一个句号之间的文本将其分解,然后在“类型:”和“类型”之后的下一个句号将其分解,但不会总是有类型或级别。@DmitryDovgopoly,你是怎么得到的在我的帖子中,我清楚地解释了我正在尝试做什么,以及我已经尝试解决的问题。我只是要求被指向正确的方向,我从来没有说过我希望你编写代码!对不起,我误解了你的假设,因为你的正则表达式非常适合你的字符串示例,所以我实际上不明白我们如何能够你可以在PHP中写代码。你可以提供测试用例,在那里ReX不工作,谢谢,Slight改变它,我忘了添加另一个文本,一旦我这样做,它似乎返回3个数组元素,我已经改变了这个链接的正则表达式,你应该考虑不使用正则表达式,因为你会一直这样。为每个新词扩展它。此外,由于几乎所有内容都是可选的,所以这个正则表达式将匹配任何至少包含一个点的内容,如“…..”、“.aaaaaaaa”,等等。strtok替代方案似乎更适合您的需要。@migg请在声称
将匹配任何至少包含一个点的内容之前密切注意正则表达式。
@Atalon:您建议的正则表达式在我看来不错。好吧……也许我应该澄清一下,它会生成“许多空的匹配组”对于任何至少包含一个点的内容;)