Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php preg_match如何知道部分值存在_Php_Regex_Preg Match - Fatal编程技术网

Php preg_match如何知道部分值存在

Php preg_match如何知道部分值存在,php,regex,preg-match,Php,Regex,Preg Match,基本上我的preg_比赛进行得很好。但是,当只有部分文本值(不是数字)存在时,我需要知道是否尝试输入正确的内容 例1: $text = "2000 FC 2 A 100 FH 1200 ACT FC "; 例2: $text = "2000 FC 2 A 100 FH ACT FC "; 代码: preg\u match(“(?P\d+(?:。.d+)*?)\h(?PACT\sFC)~”,$text,$act\u fc); 示例1显示了正确的文本“1200 ACT FC”。执行preg_m

基本上我的preg_比赛进行得很好。但是,当只有部分文本值(不是数字)存在时,我需要知道是否尝试输入正确的内容

例1:

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

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

preg\u match(“(?P\d+(?:。.d+)*?)\h(?PACT\sFC)~”,$text,$act\u fc);
示例1显示了正确的文本“1200 ACT FC”。执行preg_match时,1200被分配给$ACT_FC数组中的value,ACT_FC被分配给unit

但是,如果存在类似示例2的情况,且仅使用“ACT FC”,则$ACT_FC数组为空

如果不进行另一个preg_匹配以仅检查“ACT_FC”,是否有方法返回找到的ACT_FC?也许可以强制“unit”填充数组,“value”可以为null


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

您可以使用
(?:…)?
使值部分成为可选部分:

preg\u match(“/(?:(?:)(?:\。\d+)*?)\h)?(?:\。\sFC)/”,$text,$act\u fc);
这是。
下面是。

您可以使用
(?:…)?
使值部分成为可选部分:

preg\u match(“/(?:(?:)(?:\。\d+)*?)\h)?(?:\。\sFC)/”,$text,$act\u fc);
这是。
这里是。

这里没有理由使用非贪婪量词:
(?:。.d+)*?
。不要忘记,点表示任何字符(换行除外),而不是文字点。要计算文字点,需要对其进行转义:
\。
。如果需要使某些内容可选,请使用
量词。没有理由在此处使用非贪婪量词:
(?:.\d+*?
。不要忘记,点表示任何字符(换行除外),而不是文字点。要计算文字点,需要对其进行转义:
\。
。如果您需要选择一些内容,请使用
量词。在这种情况下,最好使用非捕获组。这非常有效,但有时缺少空间。比如1200ACT FCAH刚刚用:(?:\h)*?)最终答案:preg\u match((?:(?P\d+(?:\。\d+)(?:\h)*?(?PACT\sFC)~,$text,$act\fc);奇怪的是,在正则表达式中,开头和结尾字符重要吗?在您的示例中,您使用“/”而我使用“~”。是否有最佳实践?谢谢你的回答,谢谢!!!在中,您可以看到“分隔符可以是任何非字母数字、非反斜杠、非空白字符。”。对我来说,使用前斜杠(
/…/
)更自然,而且我认为使用(
/…/g
)时它们看起来更好。在这种情况下,最好使用非捕获组。这非常有效,但有时会缺少空间。比如1200ACT FCAH刚刚用:(?:\h)*?)最终答案:preg\u match((?:(?P\d+(?:\。\d+)(?:\h)*?(?PACT\sFC)~,$text,$act\fc);奇怪的是,在正则表达式中,开头和结尾字符重要吗?在您的示例中,您使用“/”而我使用“~”。是否有最佳实践?谢谢你的回答,谢谢!!!在中,您可以看到“分隔符可以是任何非字母数字、非反斜杠、非空白字符。”。对我来说,使用前斜杠(
/…/
)更自然,而且我认为使用(
/…/g
)时它们看起来更好。
preg_match("~(?P<value>\d+(?:.\d+)*?)\h(?P<unit>ACT\sFC)~", $text, $act_fc);
preg_match("/(?:(?P<value>\d+(?:\.\d+)*?)\h)?(?P<unit>ACT\sFC)/", $text, $act_fc);