preg_match如何知道分部值的存在


preg_match how to know partial value exist

基本上我的preg_match运行良好。然而,当只存在文本的部分值(而不是数字)时,我需要知道有人试图输入正确的内容。

示例1:

$text = "2000 FC
2 A
100 FH
1200 ACT FC
";

示例2:

$text = "2000 FC
2 A
100 FH
ACT FC
";

代码:

preg_match("~(?P<value>'d+(?:.'d+)*?)'h(?P<unit>ACT'sFC)~", $text, $act_fc);

示例1显示了正确的文本"1200 ACT FC"。当执行preg_match时,1200被分配给$ACT_FC数组中的值并且ACT_FC被分配给单元。

但是,如果存在像示例2这样只包含"ACTFC"的情况,那么$ACT_FC数组为空。

如果不进行另一次预匹配,只检查"ACT FC",是否有方法返回找到的ACT_FC?也许"unit"可以被强制填充数组,而"value"可以为null。

注意:我正在处理换行符之间的匹配数据,因此部分代码保持几乎相同是很重要的。

您可以使用(?:...)?:使值部分可选

preg_match("/(?:(?P<value>'d+(?:'.'d+)*?)'h)?(?P<unit>ACT'sFC)/", $text, $act_fc);

这是演示。这里是regex测试仪。