iMouse免越狱自动化测试脚本开发(14)-php实现一个强大的字符串查找和匹配方法

业务需求

在使用OCR查找字符的过程中,有多种查找条件。
例如:
1、完全匹配
2、开头匹配
3、结尾匹配
4、中间匹配
5、部分匹配

如何封装一个函数,实现同时支持以上匹配规则呢?

假设完整的字符串是“无线局域网”。
子字符串要对应上面的匹配规则,用以下内容来表示:

完全匹配:无线局域网
开头匹配:无线(.*)
结尾匹配:(.*)局域网
中间匹配:无线(.*)网
部分匹配:无线

实现

温馨提示:此处内容需要后才能查看!

难点就在于,开头匹配、结尾匹配、中间匹配,究竟如何实现?
下面是飞云花一晚上的时间测试编写出来的代码:

/**
 * @brief: 检测字符串是否包含子字符串
 * @param {*} $content          完整的字符串
 * @param {*} $searchPattern    子字符串,支持(.*)的匹配符。例如,原字符串为“无线局域网”,可使用“无线(.*)”或者“(.*)局域网”或者“无线(.*)网”来进行模糊匹配
 * @param {*} $isDim            是否模糊匹配。子字符串含(.*)时,强制模糊匹配
 * @return boolean
 */
public function _findText($content, $searchPattern, $isDim = false)
{
    if (strpos($searchPattern, '(.*)') !== false) {
        if (strpos($searchPattern, '(.*)') === 0) {
            $position = strpos($searchPattern, '(.*)');
            if ($position !== false) {
                $suffix = substr($searchPattern, $position + strlen('(.*)'));
                if ($suffix) {
                    if (substr($content, -strlen($suffix)) === $suffix) {
                        return preg_match('/' . $searchPattern . '/', $content);
                    }
                }
            }
        } else if (substr($searchPattern, -strlen('(.*)')) === '(.*)') {
            $position = strpos($searchPattern, '(.*)'); 
            if ($position !== false) {
                $prefix = substr($searchPattern, 0, $position); 
                if ($prefix) {
                    if (strpos($content, $prefix) === 0) {
                        return preg_match('/' . $searchPattern . '/', $content);
                    }
                }
            }
        } else {
            return preg_match('/' . $searchPattern . '/', $content);
        }
    } else if ($isDim) {
        return strpos($content, $searchPattern) !== false;
    } else {
        return preg_match('/^' . $searchPattern . '$/', $content);
    }
    return false;
}

后记

通过调用个方法,你可以进一步封装,让你使用OCR的过程中如虎添翼。
此外,你还可以将这个方法翻译成其他编程语言可用的方法。

下面列举几个实际调用的例子:

# 指定多个模糊的字符串,判断是否在抖阴首页

var_dump($iMouse->ocrFindText('首页|朋友|消息|我|直播|经验|同城|关注|商城|推荐|展开|全屏观看|橱窗|抢首评|收藏|分享', true));
# 指定多个模糊的字符串,判断是否在抖阴个人中心页面

var_dump($iMouse->ocrFindText('音号|获赞|观看历史|我的钱包|编辑资料|添加朋友', true));
# 指定多个模糊的字符串,查找"朋友推荐"的弹窗,找到就点击右上角的关闭按钮

var_dump($iMouse->ocrFindText('朋友推荐|朋友推荐(.*)', true, [130, 60, 260, 100], true, 3 * 1000, 327 - 197));
# 指定多个模糊的字符串,找到就返回第一个找到的字符串的坐标

$tabPoint = $iMouse->ocrFindTextP('作品|私密|推荐|收藏|被@|喜欢', true);
if ($tabPoint) {
    $x = 50;
    $y = $tabPoint['y'] + 100;
    $iMouse->click($x, $y, 5 * 1000);
}
1. 官方交流QQ群,添加多个不批。建议使用安卓手机或电脑申请。
飞云脚本圈: 586333520飞云脚本圈
Auto.js学习交流③群:286635606
Auto.js学习交流②群:712194666(满员)
IOS免越狱自动化测试群:691997586
2. 盗版,破解有损他人权益和违法作为,请各位会员支持正版。
3. 本站部分资源来源于用户上传和网络搜集,如有侵权请提供版权证明并联系站长删除。
4.如未特别申明,本站的技术性文章均为原创,未经授权,禁止转载/搬运等侵权行为。
5.全站所有付费服务均为虚拟商品,购买后自动发货。售出后概不接受任何理由的退、换。注册即为接受此条款。
6.如果站内内容侵犯了您的权益,请联系站长删除。
飞云脚本 » iMouse免越狱自动化测试脚本开发(14)-php实现一个强大的字符串查找和匹配方法

企业级大数据智能营销管理系统

了解详情