Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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
regex根据值的条件存在过滤php数组_Php_Regex_Array Filter - Fatal编程技术网

regex根据值的条件存在过滤php数组

regex根据值的条件存在过滤php数组,php,regex,array-filter,Php,Regex,Array Filter,我有一个php数组 $arr[0] = "something/somethingelse/anotherval"; $arr[1] = "something/!somevar/anotherval"; $arr[3] = "something/!notcorrect/anotherval"; $arr[4] = "something/somethingelse/_MyVal"; $arr[5] = "something/_MyVal/anotherval"

我有一个php数组

    $arr[0] = "something/somethingelse/anotherval";
    $arr[1] = "something/!somevar/anotherval";
    $arr[3] = "something/!notcorrect/anotherval";
    $arr[4] = "something/somethingelse/_MyVal";
    $arr[5] = "something/_MyVal/anotherval";
    $arr[6] = "something/_AnotherNotCorrect/anotherval";
我正在使用array_filter按特定条件筛选数组

    $f = array_filter(array_keys($arr), function ($k){ 
    return ( strpos($k, 'something/') !== false ); }); 
这将返回与术语某物/匹配的所有VAL。。。我想说的是,如果我们遇到![somethine here]或a[somethine here]然后我们需要确保[somethine here]匹配$afterExcl或$afterunderline。如果我们没有遇到一个!或者只需检查strpos($k,'something/')!=假支票

(请注意!和uu部分可能位于或不位于val字符串的末尾)

我假设这是正则表达式,但我一直在努力构建它们

澄清
谢谢不过,澄清一下吧!或者uuSequence可能不是something/之后的下一个目录,它可能需要执行三到四个步骤。并且,我将提供一个$afterExcl或$after下划线值,它将指定批准的值。基本上客户端正在使用!和u表示“区域”,即。 某物/图像/!加拿大 一些东西/视频/教程/!加拿大还是 某物/图像/!美国还是 某物/图像/!墨西哥还是最后一个 某物/图像/全部

那我就具体说明一下

$afterExcl=加拿大

我的过滤器将返回

某物/图像/!加拿大 一些东西/视频/教程/!加拿大
something/images/All

您可以使用以下内容:

$f = array_filter(array_keys($arr), function ($k){ 
    return preg_match('~something/(?![_!])~', $k); }); 
负前瞻
(?!…)
检查斜杠后面是否有
或a
\uuuu

请注意,
preg_match
如果找到则返回1,否则返回0。如果要返回
true
false
,可以使用三元运算符:

return preg_match('~something/(?![_!])~', $k) ? true : false;
另一种方式


如果您使用
strop
,我假设您描述为
'something/'
的字符串是一个固定字符串
$str
,换句话说,您知道这个字符串的长度。由于
strpos
返回事件字符串中的位置
$pos
,因此您可以轻松检查
$pos+strlen($str)
位置是否有感叹号或下划线。(例如,您可以提取下一个字符并检查它是否在数组
数组(“!”、“”)
)中)

谢谢。不过,澄清一下吧!或者uuSequence可能不是something/之后的下一个目录,它可能需要执行三到四个步骤。并且,我将提供一个$afterExcl或$after下划线值,它将指定批准的值。基本上客户端正在使用!和uu表示“区域”,即某物/图像/!加拿大某物/视频/教程/!加拿大什么的/图片/!美国什么的/图片/!墨西哥或last something/images/All然后我会指定$afterexc=Canada我的过滤器将返回something/images/!加拿大某物/视频/教程/!加拿大某物/图片/全部