被正则玩疯了,为什么$matches[0]为空?
写个正则,能正常匹配到,但我还需要他返回匹配的整条字符串
正则如下
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);
$_content的内容是
<!-- Layout name="header" --><!-- Layout name="footer" -->
我知道只能匹配到第一条,但根据官方文档写的: $matches[0]将包含完整模式匹配到的文本
但我测试了很久,只能得到以下结果
Array( [0] => [1] => header)
$matches[0]为什么会为空?说好的匹配到的文本呢?(我原意是想$matches[0]值为 的)
还有一个问题,不知道为什么断言后就匹配不到,
preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->$/', $_content, $matches);
就这样,末尾加了个美元符,就匹配不到任何东西了,虽然这个不影响,但我还是想知道是为什么,看网上的文档,一堆 术语头都晕了,希望高人解答,谢谢。
晕,怎么只能给100分啊,我有1000分的。。。
回复讨论(解决方案)
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
Array( [0] => <!-- Layout name="header" --> [1] => header)
只不过你是被你自己弄糊涂了
$matches[0] 是一个html标记,只在文本方式下才能看到
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
$matches[0]将包含完整模式匹配到的文本,它后面还有一句: $matches[1]将包含第一个捕获子组匹配到的文本, 以此类推.
意思应该是只包含你反捕获(也就是你的小括号括起来的内容),而不是执行的全局匹配,所以用preg_match_all来执行全局匹配
还有你的正则在最前面加了^,它表示你执行匹配的字符串必须已^之后的内容开始,所以是不能匹配到了
同理,$表示匹配的字符串必须以$之前的结尾,所以要匹配到内容,$_content='';或者$_content='‘;才能被匹配到
$_content =<<< HTML<!-- Layout name="header" --><!-- Layout name="footer" -->HTML;preg_match( '/^<!--\sLayout\sname\s*=\s*"(.*)"\s-->/', $_content, $matches);print_r($matches);
Array( [0] => <!-- Layout name="header" --> [1] => header)
只不过你是被你自己弄糊涂了
$matches[0] 是一个html标记,只在文本方式下才能看到
我了个去!!!忘记了HTML的注释标记,晕,真的昏了一晚上啊,感谢提醒。
$_content='<!-- Layout name="header" --><!-- Layout name="footer" -->';preg_match_all('//', $_content, $matches);print_r($matches);/*Array( [0] => Array ( [0] => [1] => ) [1] => Array ( [0] => header [1] => footer ))*/
$matches[0]将包含完整模式匹配到的文本,它后面还有一句: $matches[1]将包含第一个捕获子组匹配到的文本, 以此类推.
意思应该是只包含你反捕获(也就是你的小括号括起来的内容),而不是执行的全局匹配,所以用preg_match_all来执行全局匹配
还有你的正则在最前面加了^,它表示你执行匹配的字符串必须已^之后的内容开始,所以是不能匹配到了
同理,$表示匹配的字符串必须以$之前的结尾,所以要匹配到内容,$_content='';或者$_content='‘;才能被匹配到
还是不太懂,是不是用了 ^ 之后,只能从 $content[0] 开始比较?前面的字串相同就进行匹配, $ 同理?
还有一个问题希望能解决一下
存在一字符串
$string = 'bbs/csdn/net/xxx';
如果字符串不是以bbs开头的就进行匹配
比如
$string = 'www/csdn/net/xxx';
因为不以 bbs 开头,继续匹配
我想到一种写法
preg_match( '#((?!bbs/).)*#', 'www/csdn/net/xxx/', $matches);
但感觉这个效率有点低下,不知道还能不能优化一下?
^是匹配输入字符串的开始位置,若待匹配的字符串不是以^之后的内容开始,根本就不会执行匹配
若是只是判断 字符串不是以bbs开头,这样比较快
$str='/bbs/www/csdn/net/xxx/';if(strpos($str,'bbs')!=0 || strpos($str,'bbs')===false){ //等于0就是以bbs开头,未找到返回false(全等于false) echo 'exe';}
^是匹配输入字符串的开始位置,若待匹配的字符串不是以^之后的内容开始,根本就不会执行匹配
若是只是判断 字符串不是以bbs开头,这样比较快
$str='/bbs/www/csdn/net/xxx/';if(strpos($str,'bbs')!=0 || strpos($str,'bbs')===false){ //等于0就是以bbs开头,未找到返回false(全等于false) echo 'exe';}
不是,其实我想写个类似django这样的URL路由功能,如果按上面的方法的话,扩展性不够强,所以想用正则表达
$str='www/bbs/net/xxx/';if(preg_match('/^bbs.+?/', $str)){ echo '以bbs开头';}else{ echo 'exe';}

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Laravel simplifie la gestion des données de session temporaires à l'aide de ses méthodes de flash intuitives. Ceci est parfait pour afficher de brefs messages, alertes ou notifications dans votre application. Les données ne persistent que pour la demande ultérieure par défaut: $ demande-

L'extension PHP Client URL (CURL) est un outil puissant pour les développeurs, permettant une interaction transparente avec des serveurs distants et des API REST. En tirant parti de Libcurl, une bibliothèque de transfert de fichiers multi-protocol très respectée, PHP Curl facilite Efficient Execu

Laravel fournit une syntaxe de simulation de réponse HTTP concise, simplifiant les tests d'interaction HTTP. Cette approche réduit considérablement la redondance du code tout en rendant votre simulation de test plus intuitive. L'implémentation de base fournit une variété de raccourcis de type de réponse: Utiliser illuminate \ support \ faades \ http; Http :: faux ([[ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

Voulez-vous fournir des solutions instantanées en temps réel aux problèmes les plus pressants de vos clients? Le chat en direct vous permet d'avoir des conversations en temps réel avec les clients et de résoudre leurs problèmes instantanément. Il vous permet de fournir un service plus rapide à votre personnalité

La journalisation PHP est essentielle pour surveiller et déboguer les applications Web, ainsi que pour capturer des événements critiques, des erreurs et un comportement d&#39;exécution. Il fournit des informations précieuses sur les performances du système, aide à identifier les problèmes et prend en charge le dépannage plus rapide

L'article traite de la liaison statique tardive (LSB) dans PHP, introduite dans PHP 5.3, permettant une résolution d'exécution de la méthode statique nécessite un héritage plus flexible. Problème main: LSB vs polymorphisme traditionnel; Applications pratiques de LSB et perfo potentiel

L'article examine l'ajout de fonctionnalités personnalisées aux cadres, en se concentrant sur la compréhension de l'architecture, l'identification des points d'extension et les meilleures pratiques pour l'intégration et le débogage.

Alipay Php ...
