在 php preg_match_all 中使用小于 (<) 运算符时遇到问题
Having trouble with less than(<) operator in php preg_match_all
我正在尝试解析一个查询字符串并将 运行 变成我不太明白的东西。
尝试匹配可以包含 < 或 > 的字符串,但只有当字符串包含 <.
时我才会看到一些奇怪的输出
示例:
<?php
$gt = 'wt>f';
preg_match_all("/([A-Za-z<>]+)/", $gt, $gtmatches);
?>
<pre><?php print_r($gtmatches); ?></pre>
Returns 符合预期:
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/Apache 2.4.29 上进行了本地测试。
感谢iainn解决了(妈的你们真快!)
我的浏览器将 < 解释为标记的开头,查看源代码,一切正常。
<和>是特殊字符。在它们中的每一个之前放置一个反斜杠,或者在它传入之前在字符串上使用这个函数 - http://php.net/manual/en/function.preg-quote.php
preg_match_all("/([A-Za-z\<\>]+)/", $gt, $gtmatches);
您正在尝试在浏览器中查看 print_r
输出,它会将 <
解释为 HTML 标记,直到 =>
几行之后。如果您查看页面源代码而不是呈现的输出,您将看到您期望的结果。
如评论中所述,正则表达式本身工作正常。
我正在尝试解析一个查询字符串并将 运行 变成我不太明白的东西。
尝试匹配可以包含 < 或 > 的字符串,但只有当字符串包含 <.
时我才会看到一些奇怪的输出示例:
<?php
$gt = 'wt>f';
preg_match_all("/([A-Za-z<>]+)/", $gt, $gtmatches);
?>
<pre><?php print_r($gtmatches); ?></pre>
Returns 符合预期:
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/Apache 2.4.29 上进行了本地测试。
感谢iainn解决了(妈的你们真快!)
我的浏览器将 < 解释为标记的开头,查看源代码,一切正常。
<和>是特殊字符。在它们中的每一个之前放置一个反斜杠,或者在它传入之前在字符串上使用这个函数 - http://php.net/manual/en/function.preg-quote.php
preg_match_all("/([A-Za-z\<\>]+)/", $gt, $gtmatches);
您正在尝试在浏览器中查看 print_r
输出,它会将 <
解释为 HTML 标记,直到 =>
几行之后。如果您查看页面源代码而不是呈现的输出,您将看到您期望的结果。
如评论中所述,正则表达式本身工作正常。