preg_匹配PHP建议

preg_匹配PHP建议,php,preg-match,Php,Preg Match,我还不太擅长预赛,我想知道是否有人能帮我一把。 我有一个值数组,例如数组(“黑色*”、“蓝色”、“红色”、“灰色*”)我需要找到末尾带有*的值,然后返回前面的单词 我相信preg_match()是最好的方法,但我愿意接受建议 提前感谢 如果必须使用正则表达式 $words = array_map(function($word) { return preg_replace('/\*\z/', '', $word); }, $arr); …但是你最好不要使用正则表达式,而使用像 $word

我还不太擅长预赛,我想知道是否有人能帮我一把。 我有一个值数组,例如
数组(“黑色*”、“蓝色”、“红色”、“灰色*”)
我需要找到末尾带有
*
的值,然后返回前面的单词

我相信preg_match()是最好的方法,但我愿意接受建议

提前感谢

如果必须使用正则表达式

$words = array_map(function($word) {
   return preg_replace('/\*\z/', '', $word);
}, $arr);

…但是你最好不要使用正则表达式,而使用像

$words = array_map(function($word) {
   return rtrim($word, '*');
}, $arr);

如果只想返回尾随有
*
的单词,请先尝试以下操作

$words = preg_grep('/\*\z/', $arr);

这样做的唯一缺点(如注释中所述)是PHP将在数组上迭代两次。如果愿意,您可以简单地使用
foreach
循环在一个循环中执行这两个操作


另外,值得一提的是匿名函数是PHP5.3的一部分。您仍然可以使用这段代码的大部分,只需将函数分离为它们自己的命名函数并向它们传递一个引用。

如果您总是使用这样的数组(即没有复杂字符串,只有word*),那么您真的不应该使用正则表达式,这是一种过度使用。 使用字符串函数,如strpos用于搜索,stru_replace或rtrim用于删除*

如果不需要替换规则(如正则表达式),则应始终使用此函数而不是preg_replace()


-from

不需要使用preg_match进行此操作-对字符串进行简单的字符查找即可:

$words = array('red*', 'grey', 'white', 'green*');
$return = array();

foreach ($words as $word) {
    if ($word[strlen($word) - 1] === '*') {
        $return[] = substr($word, 0, -1);
    }
}
var_dump($return);

这不会返回整个值,包括
*
?我们的要求似乎是只捕捉单词,而不是
*
@e.dan:我不相信它会。检查代码板。次要的点数组映射首先获取数组,然后是回调函数。虽然处理数组两次(一次搜索星号,然后一次检索单词)似乎有点效率低下,但它还是可以工作的。@majelbstoat:我想你会先找到接受回调。至于效率低下,是的,你可以在一个循环中完成,但随后你就失去了功能性:)@alex你确实会。至于参数的顺序,我把它和数组_filter()混淆了。啊,PHP,你可爱的Pineer haystack,haystack Pineer参数排序再次让我困惑:)-PS,值得注意的是匿名函数仅适用于PHP5.3+?你想返回没有尾随的单词吗?@alex Hello!事实上,我在布里斯班再呆两天,之后我将成为圣方济各会的一员(尽管事实上,我仍然是一名Pom!)我明白了。祝你旅途愉快!