regex根据值的条件存在过滤php数组
我有一个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"
$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/!加拿大某物/视频/教程/!加拿大某物/图片/全部