亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

php適用于windows的fnmatch(匹配函數)可匹配中文

2020-03-22 19:03:25
字體:
來源:轉載
供稿:網友
  • 最近在寫項目時,需要用到通配符匹配一些字符串,需要類似*匹配所有字符,?匹配單個字符的做法,在php中找到了fnmatch函數可使用,但發現它不能使用在windows的環境中,后來在網上搜索到一篇文章,地址如下:

    http://bbs.phpchina.com/thread-80501-1-1.html

    該貼中有兩種方法可以實現fnmatch函數,現貼如下:

    function fnmatch($pattern, $string)         //$pattern匹配式, $string被匹配的字符串{    $starStack = array();                   //創建記錄pattern開始位置的棧,這個作用是像編輯器的后退    $sstrStack = array();                   //創建記錄$string開始位置的棧    $countStack = 0;                        //棧大小,用一個同步記錄棧大小,減少count()時所耗的時間    $ptnStart = strlen($pattern) - 1;       //定位匹配式最后一個字符, 算法是從字符串后面開始匹配    $strStart = strlen($string) - 1;        //定位字符串的最好一個字符    for(; 0 <= $strStart; $strStart --)     //開始匹配循環, 每匹配一個字符, $strStart就往前移一個字符    {        $sc = $string{$strStart};           //取得當前在比較的字符        $pc = ($ptnStart < 0) ? '' : $pattern{$ptnStart};//取得匹配式當前的字符,已到結束位置,給個空        if($sc !== $pc)        {                                   //當兩個字符不相同時, 就要進行一些匹配式特殊字符的比較            if($pc === '*')                 //如果匹配式當前字符是*號, 進行*號匹配            {                while($ptnStart > 0 && ($pc = $pattern{$ptnStart - 1}) === '*')                    $ptnStart --;           //while這段是去除幾個連續的*號, 并嘗試和取得下一個字符                if($ptnStart > 0 && ($pc === $sc || $pc === '?'))//比較下個字符是否相同或是?號                {                           //如果下一個字符匹配成功                    $starStack[$countStack] = $ptnStart;//保存這個*號的位置                    $sstrStack[$countStack] = $strStart;//保存$string開始位置                    $countStack ++;         //棧向下移一                    $ptnStart -= 2;         //匹配式定位,前移兩位,分別是當前*號位和已經匹配的一個                    continue;               //進行下一次循環                }            }            elseif($pc === '?')             //如果匹配式當前字符是?號, 進行?號匹配            {                $ptnStart --;               //?號匹配是字符串同步前移一個位置            }            elseif($countStack > 0)         //如果不是通配符,檢查棧中是否有保存上一個*號的位置            {                               //有就還原此*號位置, 回到上一個*號處再次進行匹配                $countStack --;                $ptnStart = $starStack[$countStack];//還原*號位置                $strStart = $sstrStack[$countStack];//還原$string開始位置            }            else             {                return false;               //以上情況都沒有的話, 匹配失敗, 返回flase            }        }        else        {            $ptnStart --;                   //字符串位置和匹配式位置上相同,前移一位,繼續下個匹配        }    }                                       //匹配循環結束    if($ptnStart === -1)                    //剛好匹配式的位置也結束, 則匹配成功, 返回true    {        return true;    }    elseif($ptnStart >= 0)                  //匹配式并沒有結束, 還有一些沒有匹配    {        while($ptnStart > 0 && $pattern{$ptnStart} === '*')//檢查剩下的是不是都是*號,去除這些*號            $ptnStart --;        if($pattern{$ptnStart} === '*')     //最后的只有一個*號結束的話, 就匹配成功, 返回true            return true;        else            return false;                   //否則, 返回false    }    return false;}

    if (!function_exists('fnmatch')) {        function fnmatch($pattern, $string) {            return @preg_match('/^' . strtr(addcslashes($pattern, '/.+^$(){}=!<>|'), array('*' => '.*', '?' => '.?')) . '$/i', $string);        }    }

    這兩個方法都可以實現,但由于我要匹配的有包含中文的,比如

    我愛中國

    匹配 我愛??

    就無法實現了,因為“中國”這個字符算4個字符,假如 匹配 我愛???? 應該就沒問題了,但是這樣對于我們來說使用非常的不方便,于是我改了一個第一個函數的實現,使用mb_strlen的方法來統計和分割字符,實現如下:

    鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

  • 發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
    国产精品69久久| 日韩中文第一页| 亚洲最大成人在线| 成人性生交大片免费看小说| 久久久成人的性感天堂| 国产日韩欧美综合| 国产91久久婷婷一区二区| 国产精品自产拍在线观| 久久久久久综合网天天| 亚洲人成77777在线观看网| 国产欧美一区二区三区四区| 久久手机精品视频| 激情亚洲一区二区三区四区| 综合国产在线观看| 亚洲人成网站色ww在线| 国产精品狼人色视频一区| 欧美精品一区二区三区国产精品| 国模精品一区二区三区色天香| 成人精品福利视频| 国产亚洲激情在线| 国产精品视频一| 欧美日韩在线第一页| 久久在精品线影院精品国产| 自拍亚洲一区欧美另类| 奇米成人av国产一区二区三区| 最近2019中文字幕在线高清| 欧美在线视频免费| 亚洲电影免费观看高清完整版在线| 亚洲高清免费观看高清完整版| 欧美精品国产精品日韩精品| 久久久久久久久久av| 日韩av电影中文字幕| 成人黄色生活片| 91久久久精品| 亚洲一级黄色片| 亚洲一区亚洲二区| 亚洲成人激情图| 欧美亚洲一级片| 国产中文字幕亚洲| 亚洲美女免费精品视频在线观看| 久久久久久久久综合| 国产福利精品在线| 日韩成人在线电影网| 日韩极品精品视频免费观看| 欧美日韩精品二区| 久久久精品久久久久| 日韩av快播网址| 国产不卡av在线免费观看| 国产精品入口免费视频一| 美女久久久久久久久久久| 国产精品久久久| 亚洲精品中文字幕av| 5252色成人免费视频| 午夜精品久久久久久久久久久久| 一本色道久久88亚洲综合88| 久久久久日韩精品久久久男男| 国产在线精品播放| 国产精品视频永久免费播放| 另类天堂视频在线观看| 色偷偷av亚洲男人的天堂| 色综久久综合桃花网| 亚洲国产精品久久久久| 国产精品福利小视频| 国产日韩av在线| 亚洲视频axxx| 亚洲精品aⅴ中文字幕乱码| 国产精品丝袜视频| 成人精品一区二区三区电影免费| 中文字幕在线日韩| 日韩精品久久久久| 精品国产91久久久| 在线观看成人黄色| 国产精品视频午夜| 欧美日本亚洲视频| 久久久中文字幕| 亚洲国产精品大全| 久久久久久网站| 国产精品青草久久久久福利99| 国产精品久久久久久婷婷天堂| 午夜精品视频在线| 91国产精品电影| 久久亚洲私人国产精品va| 欧美精品在线看| 久久99国产精品自在自在app| 亚洲男人天堂九九视频| 亚洲国产精品字幕| 亚洲欧美成人精品| 91免费在线视频| 日本高清不卡在线| 亚洲国产精品嫩草影院久久| 久久精品精品电影网| 欧美人与物videos| 国产美女搞久久| 欧美日韩国产在线播放| 国产亚洲美女精品久久久| 国产剧情日韩欧美| 国产精品普通话| 亚洲电影免费观看| 欧美激情在线一区| 亚洲精品国产欧美| 精品久久久久久亚洲精品| 久久网福利资源网站| 欧美一级视频免费在线观看| 91精品视频免费看| 欧美性生交xxxxxdddd| 亚洲精品视频网上网址在线观看| 久久成年人视频| 91免费人成网站在线观看18| 亚洲国产精品悠悠久久琪琪| 91产国在线观看动作片喷水| 亚洲图片在区色| 亚洲男人的天堂网站| 成人h视频在线观看播放| 亚洲欧美中文日韩在线| 欧美日韩国产精品一区二区不卡中文| 午夜精品在线观看| 欧美成人午夜激情在线| 国产精品第1页| 欧美丰满少妇xxxxx| 欧美精品在线播放| 91精品久久久久久久久久久久久| 亚洲国产精品久久| 日本欧美在线视频| 精品国产依人香蕉在线精品| 中文字幕一区二区精品| 欧美美女操人视频| 韩国v欧美v日本v亚洲| 国产亚洲美女久久| 91禁外国网站| 亚洲系列中文字幕| 久久夜色精品国产亚洲aⅴ| 欧美日韩国产精品一区| 国产精品爽爽爽爽爽爽在线观看| 国产极品精品在线观看| 国产精品久久久久久久久影视| 日本久久中文字幕| 亚洲a在线观看| 久久久久久久久久久人体| 91在线视频导航| 狠狠色狠狠色综合日日五| 日本久久久久亚洲中字幕| 最近2019中文字幕第三页视频| 久久国产视频网站| 精品福利视频导航| 欧美黑人xxxⅹ高潮交| 日韩欧美一区二区三区久久| 国产精品你懂得| 法国裸体一区二区| 久久久久久12| 国产精品稀缺呦系列在线| 国产精品激情自拍| 国产999在线观看| 国产脚交av在线一区二区| 日韩精品在线观看视频| 欧美日韩在线影院| 中文字幕视频在线免费欧美日韩综合在线看| 国产丝袜精品视频| 九九热在线精品视频| 国产在线精品一区免费香蕉| 亚洲欧美国产制服动漫| 成人激情在线播放| 日韩av网址在线| 久久精品国产99国产精品澳门| 欧美在线视频免费观看|