php适用于windows的fnmatch(匹配函数),可匹配中文。_PHP教程
该贴中有两种方法可以实现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的方法来统计和分割字符,实现如下:
function fnmatch($pattern, $string) //$pattern匹配式, $string被匹配的字符串 { $encoding = gb2312; //根据自己的页面的编码,来定义这个编码 $starStack = array(); //创建记录pattern开始位置的栈,这个作用是像编辑器的后退 $sstrStack = array(); //创建记录$string开始位置的栈 $countStack = 0; //栈大小,用一个同步记录栈大小,减少count()时所耗的时间 $ptnStart = mb_strlen($pattern, $encoding) - 1; //定位匹配式最后一个字符, 算法是从字符串后面开始匹配 $strStart = mb_strlen($string, $encoding) - 1; //定位字符串的最好一个字符 for(; 0 <= $strStart; $strStart --) //开始匹配循环, 每匹配一个字符, $strStart就往前移一个字符 { $sc = mb_substr($string, $strStart, 1, $encoding); //取得当前在比较的字符 $pc = ($ptnStart < 0) ? '' : mb_substr($pattern, $ptnStart, 1, $encoding);//取得匹配式当前的字符,已到结束位置,给个空 if($sc !== $pc) { //当两个字符不相同时, 就要进行一些匹配式特殊字符的比较 if($pc === '*') //如果匹配式当前字符是*号, 进行*号匹配 { while($ptnStart > 0 && ($pc = mb_substr($pattern, $ptnStart-1, 1, $encoding)) === '*') $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 && mb_substr($pattern, $ptnStart, 1, $encoding) === '*')//检查剩下的是不是都是*号,去除这些*号 $ptnStart --; if(mb_substr($pattern, $ptnStart, 1, $encoding) === '*') //最后的只有一个*号结束的话, 就匹配成功, 返回true return true; else return false; //否则, 返回false } return false; }
实现完毕,可完美匹配中文了。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Die Möglichkeit zur Aktualisierung von Bybit -Börsen variiert je nach Plattform und Gerät: Mobil: Überprüfen Sie nach Updates und installieren Sie im App Store. Desktop -Client: Überprüfen Sie die Updates im Hilfemenü und installieren Sie automatisch. Webseite: Sie müssen auf die offizielle Website zugreifen, um Updates zu erhalten. Wenn der Austausch nicht aktualisiert wird, kann dies zu Sicherheitslücken, funktionalen Einschränkungen, Kompatibilitätsproblemen und reduzierter Transaktionseffizienz führen.

Deepseek ist ein leistungsstarkes Intelligent -Such- und Analyse -Tool, das zwei Zugriffsmethoden bietet: Webversion und offizielle Website. Die Webversion ist bequem und effizient und kann ohne Installation verwendet werden. Unabhängig davon, ob Einzelpersonen oder Unternehmensnutzer, können sie massive Daten über Deepseek problemlos erhalten und analysieren, um die Arbeitseffizienz zu verbessern, die Entscheidungsfindung zu unterstützen und Innovationen zu fördern.

Detaillierte Erläuterungs- und Installationshandbuch für Pinetwork -Knoten In diesem Artikel wird das Pinetwork -Ökosystem im Detail vorgestellt - PI -Knoten, eine Schlüsselrolle im Pinetwork -Ökosystem und vollständige Schritte für die Installation und Konfiguration. Nach dem Start des Pinetwork -Blockchain -Testnetzes sind PI -Knoten zu einem wichtigen Bestandteil vieler Pioniere geworden, die aktiv an den Tests teilnehmen und sich auf die bevorstehende Hauptnetzwerkveröffentlichung vorbereiten. Wenn Sie Pinetwork noch nicht kennen, wenden Sie sich bitte an was Picoin ist? Was ist der Preis für die Auflistung? PI -Nutzung, Bergbau und Sicherheitsanalyse. Was ist Pinetwork? Das Pinetwork -Projekt begann 2019 und besitzt seine exklusive Kryptowährung PI -Münze. Das Projekt zielt darauf ab, eine zu erstellen, an der jeder teilnehmen kann

Es gibt viele Möglichkeiten, Deepseek zu installieren, einschließlich: kompilieren Sie von Quelle (für erfahrene Entwickler) mit vorberechtigten Paketen (für Windows -Benutzer) mit Docker -Containern (für bequem am besten, um die Kompatibilität nicht zu sorgen), unabhängig von der Methode, die Sie auswählen, bitte lesen Die offiziellen Dokumente vorbereiten sie sorgfältig und bereiten sie voll und ganz vor, um unnötige Schwierigkeiten zu vermeiden.

Der offizielle Eingang der Website des Coinsuper -Austauschs: https://www.coinsuper.com. Die Client -Download -Kanäle sind: Windows -Client, MacOS -Client und Mobile (iOS/Android). Die Registrierung erfordert eine E-Mail, eine Handynummer und ein Passwort, und Sie müssen die echte Authentifizierung abschließen, bevor Sie handeln können. Die Plattform bietet eine Vielzahl von digitalen Asset -Transaktionen, einschließlich Bitcoin, Ethereum usw., mit dem Transaktionsgebührrate von 0,1% für Bestellungen und Akzeptoren. Zu den Sicherheitssicherungen zählen Kaltbrieftaschenlager, zweifaktorische Überprüfung, Anti-Geldwäsche- und Anti-Terrorismus-Finanzierungsmaßnahmen sowie die Sicherheitsbevölkerung.

Bitget ist eine Kryptowährungsbörse, die eine Vielzahl von Handelsdienstleistungen anbietet, darunter Spot -Handel, Vertragshandel und Derivate. Der 2018 gegründete Austausch hat seinen Hauptsitz in Singapur und verpflichtet sich, den Benutzern eine sichere und zuverlässige Handelsplattform zu bieten. Bitget bietet eine Vielzahl von Handelspaaren, einschließlich BTC/USDT, ETH/USDT und XRP/USDT. Darüber hinaus hat der Austausch einen Ruf für Sicherheit und Liquidität und bietet eine Vielzahl von Funktionen wie Premium -Bestellarten, gehebelter Handel und Kundenunterstützung rund um die Uhr.

Ouyi Okx, die weltweit führende digitale Asset Exchange, hat jetzt ein offizielles Installationspaket gestartet, um ein sicheres und bequemes Handelserlebnis zu bieten. Auf das OKX -Installationspaket von Ouyi muss nicht über einen Browser zugegriffen werden. Der Installationsprozess ist einfach und einfach zu verstehen.

Gate.io ist ein beliebter Kryptowährungsaustausch, den Benutzer verwenden können, indem sie sein Installationspaket herunterladen und auf ihren Geräten installieren. Die Schritte zum Abholen des Installationspakets sind wie folgt: Besuchen Sie die offizielle Website von Gate.io, klicken Sie auf "Download", wählen Sie das entsprechende Betriebssystem (Windows, Mac oder Linux) und laden Sie das Installationspaket auf Ihren Computer herunter. Es wird empfohlen, die Antiviren -Software oder -Firewall während der Installation vorübergehend zu deaktivieren, um eine reibungslose Installation zu gewährleisten. Nach Abschluss muss der Benutzer ein Gate.io -Konto erstellen, um es zu verwenden.
