2017-12-27 202 views
1

我试图解析一个查询字符串,并遇到了一些我无法弄清楚的东西。在php中遇到小于(<)的操作符preg_match_all

试图匹配一个字符串,该字符串可以包含<或>,但是只有当字符串包含<时,才会看到一些奇怪的输出。

例子:

<?php 
$gt = 'wt>f'; 
preg_match_all("/([A-Za-z<>]+)/", $gt, $gtmatches); 
?> 

<pre><?php print_r($gtmatches); ?></pre> 

返回预期:

Array 
(
    [0] => Array 
     (
      [0] => wt>f 
     ) 

    [1] => Array 
     (
      [0] => wt>f 
     ) 
) 

但只需更换该>与<,给人很奇怪输出:

代码:

<?php 
$lt = 'wt<f'; 
preg_match_all("/([A-Za-z<>]+)/", $lt, $ltmatches); 
?> 

<pre><?php print_r($ltmatches); ?></pre> 

输出:

Array 
(
    [0] => Array 
     (
      [0] => wt Array 
     (
      [0] => wt 

我测试过这对PHP 5.6.24/IIS 10,并在本地上的PHP 32年6月5日/阿帕奇2.4.29。

解决由于iainn(该死,你们是快!)

我的浏览器被解释<作为标签的开始,望着源,一切都很好。

+1

它适用于我: - https://eval.in/926067和https://eval.in/926069(两个版本) –

回答

0

你试图查看在浏览器中print_r输出,它的解释<作为HTML标签,直到=>结尾几行后。如果您查看页面源代码而不是渲染输出,则会看到您期待的结果。

正如在评论中提到的,正则表达式本身工作正常。

+1

ahhh哈哈当然是那么简单,我想我的编码时间太长 - 谢谢! –

0

<和>是特殊字符。放置一个反斜杠他们每个人的面前,或者它在传递前使用此功能上线 - http://php.net/manual/en/function.preg-quote.php

preg_match_all("/([A-Za-z\<\>]+)/", $gt, $gtmatches); 
+0

浏览器试图将其解释为html标记,但非常感谢preg_quote ,这会派上用场! –