【发布时间】:2011-01-10 17:44:39
【问题描述】:
我想检查搜索关键字“cli”或“ent”或“cl”是否存在于字符串“client”中并且不区分大小写。我将 preg_match 函数与模式 '\bclient\b' 一起使用。但它没有显示正确的结果。匹配未找到错误获取。
请大家帮忙
谢谢
【问题讨论】:
我想检查搜索关键字“cli”或“ent”或“cl”是否存在于字符串“client”中并且不区分大小写。我将 preg_match 函数与模式 '\bclient\b' 一起使用。但它没有显示正确的结果。匹配未找到错误获取。
请大家帮忙
谢谢
【问题讨论】:
我不会为此使用正则表达式,这是额外的开销和复杂性,而常规字符串函数就足够了。为什么不改用stripos()?
$str = 'client';
$terms = array('cli','ent','cl');
foreach($terms as $t) {
if (stripos($str,$t) !== false) {
echo "$t exists in $str";
break;
}
}
【讨论】:
strpos()/stripos() 比 strstr()/stristr() 更快,内存效率更高,如果您只需要知道给定的子字符串是否存在。
stripos() 的文档,您会看到 if 返回子字符串匹配的位置索引,而不是子字符串本身。如果要输出匹配的术语,只需echo $filterstring。你没有提到你想要在你的函数中什么样的输出,只是你想匹配一个子字符串,所以我假设你只是在寻找一个真/假匹配。
stripos 与strpos 相对,越慢,字符串越长,正则表达式可能会更快。在stackoverflow.com/questions/1962031/… 上查看类似的问题和我的基准
尝试模式/cli?|ent/
解释:
cli 匹配第一部分。我?使 i 在搜索中成为可选项。
| 表示或,与 cli 或 ent 匹配。
【讨论】:
\b 是单词边界,它不会匹配client 中的cli,您需要删除\b
【讨论】: