首页 > 解决方案 > 在单数和复数变体中搜索 needle

问题描述

我正在寻找一个好的解决方案来检查一个单词(即使是单数版本)是否存在于特定的字符串中。

例子:

$search = 'users';

$array = [
    'index-users',
    'view-users',
    'create-users',
    'index-user-roles',
    'view-user-roles',
    'create-user-roles',
    'index-todos',
    'view-todos',
    'create-todos',
    'index-attributes',
    'view-attributes',
    'create-attributes',
];

我希望检查的结果在users这里true

即使在此示例(单数)中,结果也应为true

<?php

$search = 'users';

$array = [
    'view-user-roles',
    'create-user-roles',
    'index-todos',
    'view-todos',
    'create-todos',
    'index-attributes',
    'view-attributes',
    'create-attributes',
];

我考虑过使用正则表达式,但我的技能不足以涵盖复数和单数变体。

我试过

\b(\w*users\w*)\b

但这不包括单数变体。我添加了一个简短的示例:https ://www.regextester.com/?fam=110732

标签: phpregex

解决方案


您可以使用preg_grep()实现类似的功能

$array = [
        'index-users',
        'view-users',
        'create-users',
        'index-user-roles',
        'view-user-roles',
        'create-user-roles',
        'index-todos',
        'view-todos',
        'create-todos',
        'index-attributes',
        'view-attributes',
        'create-attributes',
];

$search = 'use'; 

$result = preg_grep('~' . $search . '~', $array);
if (!empty($result)){
   var_dump($result);
} else {
  echo 'No match found';
}

推荐阅读