2017-12-27 15 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 5.6.32/2.4.29のApacheにしました。

解決おかげでiainnする(気君たちは速いです!)

私のブラウザはソースを見て、タグの開始として<を解釈して、すべてが正常です。

+1

それは私のために働いています: - https://eval.in/926067とhttps://eval.in/926069(2つのバージョン) –

答えて

0

ブラウザでprint_r出力を表示しようとしている、そしてそれは、HTMLタグとして<を解釈しています、2行後に=>の終わりまで。レンダリングされた出力ではなくページソースを表示すると、期待している結果が表示されます。

コメントに記載されているとおり、正規表現自体は問題なく動作しています。

+1

ああ、もちろん、それは簡単だった、私はあまりにも長くコーディングしていたと思う.-ありがとう! –

0

<と>は特殊文字です。それらのそれぞれの前にバックスラッシュを置き、または渡されたその前に文字列にこの機能を使用する - http://php.net/manual/en/function.preg-quote.php

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

ブラウザはHTMLタグとして解釈しようとしましたが、preg_quoteそれは便利になるだろう! –

関連する問題