2017-12-27 196 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 ,這會派上用場! –