gpt4 book ai didi

php - 匹配行尾不起作用

转载 作者:行者123 更新时间:2023-12-02 04:53:08 25 4
gpt4 key购买 nike

你好,我有下面的代码

www.dafont.com  FALSE   /   FALSE   0   PHPSESSID   5sce9gsn1ltj74brc02ls6gsg2
.dafont.com TRUE / FALSE 1409175984 msid MC222

我需要获取 5sce9gsn1ltj74brc02ls6gsg2mc22。我尝试了下面的代码,但它不起作用

 preg_match('/PHPSESSID (.*?)/',$getit,$session);
preg_match('/msid (.*?)/',$getit,$msid);

最佳答案

评论已经找到了问题的根源:通过使用问号来指示您的匹配是惰性的(与默认的贪婪相反),它正在进行最小匹配,这在这种情况下……什么都没有。

考虑:

$input = "foo bar";
preg_match( '/foo (.*)/', $matches ); // matches 'bar'
preg_match( '/foo (.*?)/', $matches ); // matches ''

惰性量词的唯一合理用途是在它后面有东西时。所以你可以使用这个:

preg_match( '/foo (.*?)$/', $matches );  // matches 'bar'

但这有点不必要。

要理解整个贪婪/懒惰的区别,这里是使用惰性匹配的有意义的地方。假设您正在尝试匹配 HTML 段落标签的内容。考虑:

input: '<p>paragraph one</p>'
regex: /<p>(.*)<\/p>/

这按预期工作。但是如果你有:

input: '<p>paragraph one</p><p>paragraph two</p>'
regex: /<p>(.*)<\/p>/

你会得到结果:

'paragraph one</p></p>paragraph two'

这可能不是您想要的。这是因为 .* 默认是贪婪:它匹配所有它能匹配的。让它变得懒惰:

/<p>(.*?)<\/p>/

将正确匹配“第一段”和“第二段”。

现在,请注意您的问题。如果您尝试匹配您知道将位于字符串末尾的内容,“字符串结尾”元字符 ($) 是您的好 helper 。此外,作为一般安全事项,预计您的输入中可能有多个空白字符并不是一个坏主意。所以我会这样修改你的代码:

preg_match('/PHPSESSID\s+(.*?)\s*$/',$getit,$session);
preg_match('/msid\s+(.*?)\s*$/',$getit,$msid);

关于php - 匹配行尾不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18476083/

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