gpt4 book ai didi

php - $ 不匹配换行符之前的位置,即最后一个字符

转载 作者:行者123 更新时间:2023-12-02 05:33:57 25 4
gpt4 key购买 nike

$ 不匹配换行符之前的位置,即最后一个字符。

理想情况下/1...$/应该匹配,但匹配发生在模式/1....$/上,这似乎是错误的。

可能是什么原因?

PHP doc还说美元字符 ($) 是一个断言,只有当当前匹配点位于主题字符串的末尾或紧接在字符串中最后一个字符的换行符之前(默认情况下)时,该断言才为真。

$subject = 'abc#
123#
';
$pattern = '/1...$/';
preg_match_all($pattern,$subject,$matches); // no match

更新:我怀疑由于换行符的\r\n 格式而导致额外的点。我做了以下实验并看到了一些提示。

$pattern = '/1...(.)$/';

echo bin2hex($matches[1]); // 28

28 似乎等于\r (CR) 所以基本上 $ 匹配在\n 之前而不是在\r\n 之前,这可能是我的问题的原因。

enter image description here

不可打印字符打开后的图像

最佳答案

问题是由于 window 文件和 linux 文件的不同换行表示

为什么会出现这个问题:

  • 我在 window 中创建了 php 文件并转移到安装了 PHP 的 linux。
  • Windows 使用\r\n 表示换行符,Linux 使用\n ==> 这就是为什么最初需要额外的点来匹配。

下面的实验证实了这一点:

$subject = 'abc#
123#
';
$pattern = '/1...(.)$/';
preg_match_all($pattern,$subject,$matches);
echo bin2hex($matches[1]); // 28
// 28 is equivalent of \r or CR(carriage return)

在 linux 系统中创建了新文件并且/1...$/捕获了匹配 :)

如果遇到同样的问题,我希望这能节省一些人的时间。

关于php - $ 不匹配换行符之前的位置,即最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11970225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com