我有这个数组:
array
0 => string 'http://example.com/site.xml'
1 => string 'http://example.com/my_custom_links_part1.xml'
2 => string 'http://example.com/my_custom_links_part2.xml'
3 => string 'http://example.com/my_custom_links_part3.xml'
4 => string 'http://example.com/my_some_other_custom_links_part1.xml'
字符串
这段代码用于获取名称中包含“my_custom_links”的链接(而不是“my_come_other_custom_links”)
$matches = array_filter($urls, function($var) { return preg_match("/^my_custom_links$/", $var); });
echo "<pre>";
print_r($urls); // will output all links
echo "</pre>";
echo "<pre>";
print_r($matches); // will output an empty array
echo "</pre>";
型
我应该得到一个有3个元素的数组,但我得到的是一个空数组。
5条答案
按热度按时间vfhzx4xs1#
你的正则表达式是错误的。
字符串
将只匹配
my_custom_links
字符串。将其更改为型
e37o9pze2#
试试这个:
字符串
kiz8lqtg3#
您的正则表达式不正确,因为它只检查
^(starts)
和$(ends)
与my_custom_links
的字符串字符串
它应该是简单的
型
uqjltbpv4#
你的代码很好,唯一的问题是你的正则表达式。它不工作的原因是因为你在开头有这个
^
,这意味着在它的开头匹配指定的值,然后你有$
,这意味着在指定的字符串值的末尾匹配该字符串。用这个代替
字符串
yc0p9oo05#
因为你是通过文字/非动态模式过滤的,所以没有真实的理由使用正则表达式。使用
array_filter()
和str_contains()
来保留所有包含所需子字符串的值。(Demo)字符串
输出量:
型
事实上,将
array_filter()
与preg_match()
一起使用实际上是一种反模式--这应该总是被preg_grep()
所取代,它使用正则表达式来过滤值。如果您的逻辑需要不区分大小写、字符串锚的开始/结束、单词边界、多字节支持或其他动态需求,正则表达式将是合适的。