Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.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]中查找一个字符串——出于某种原因匹配所有字符串?_Php_Regex - Fatal编程技术网

在另一个字符串[php]中查找一个字符串——出于某种原因匹配所有字符串?

在另一个字符串[php]中查找一个字符串——出于某种原因匹配所有字符串?,php,regex,Php,Regex,我正在尝试将窗体提供的UTC时间和窗体提供的事件名称字符串与从文件中读入的数组相匹配。问题是它似乎总是匹配,即使它不应该匹配。文件的格式将始终保持不变,因此我知道我将查找双引号内的值,因此在使用strpos()无法获得结果后,我尝试了preg_match…现在匹配所有内容。下面的代码和示例输出($utc和$event_name)已设置并在到达此处时正确): 我应该只匹配最后一个,但它们都匹配。我一直在玩正则表达式,似乎找不到正确的魔力。在双引号字符串中不需要做任何奇怪的事情,只需按原样插入变量即

我正在尝试将窗体提供的UTC时间和窗体提供的事件名称字符串与从文件中读入的数组相匹配。问题是它似乎总是匹配,即使它不应该匹配。文件的格式将始终保持不变,因此我知道我将查找双引号内的值,因此在使用strpos()无法获得结果后,我尝试了preg_match…现在匹配所有内容。下面的代码和示例输出($utc和$event_name)已设置并在到达此处时正确):


我应该只匹配最后一个,但它们都匹配。我一直在玩正则表达式,似乎找不到正确的魔力。

在双引号字符串中不需要做任何奇怪的事情,只需按原样插入变量即可

$match1 = "/$utc/";
$match2 = "/$event_name/";
我怀疑你的正则表达式正在寻找零长度字符串

而且,这行不需要那么多括号

if (preg_match($match1,$value) == 1 and preg_match($match2,$value) == 1) {
    [...]
}

简化了它,得到了我想要的:

foreach($line_array as $key => $value) {
   print "Value = $value<p>";
   if (preg_match("/$utc/",$value) and preg_match("/$event_time/",$value))
   {
       print "Contains targets: $value<p>";
   } else {
       print "Case 1 - False<p>";
      //code to act on hit will go here
   }
}
foreach($line\u数组为$key=>$value){
打印“Value=$Value”;
if(preg_match(“/$utc/”,$value)和preg_match(“/$event_time/”,$value))
{
打印“包含目标:$value”;
}否则{
打印“案例1-错误”;
//对命中进行操作的代码将转到此处
}
}

但答案2让我找到了正确的方向。谢谢你,伊恩

如果您的文件实际上是JSON字符串,为什么不简单地对它们进行解码呢?我还没有用PHP尝试过正则表达式(虽然很快),但我建议您在正则表达式定义中要小心。您使用的某些字符可能在正则表达式中出错。查看有关构建正则表达式的详细信息。
if (preg_match($match1,$value) == 1 and preg_match($match2,$value) == 1) {
    [...]
}
foreach($line_array as $key => $value) {
   print "Value = $value<p>";
   if (preg_match("/$utc/",$value) and preg_match("/$event_time/",$value))
   {
       print "Contains targets: $value<p>";
   } else {
       print "Case 1 - False<p>";
      //code to act on hit will go here
   }
}