gpt4 book ai didi

php - 匹配初始化的整数值

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

假设我有这个字符串:
var a=23434,bc=3434,erd=5656,ddfeto='dsf3df34dff3',eof='sdfwerwer34',wer=4554;
我应该如何匹配分配为整数的所有初始化?这是我目前的尝试,但我不明白为什么它匹配所有内容。

$pattern = '/var (.*=\d)/';
preg_match_all($pattern,$page,$matches);

编辑:我正在尝试匹配每个初始化:
1 => a=23434
2 => bc=3434

等等...

编辑:这是我尝试的更新:
$pattern = '/[^v^a^r] (.*=\d+),/';
preg_match_all($pattern,$page,$matches);

0 => 'var a=23434,bc=3434,erd=5656,'
1 => 'a=23434,bc=3434,erd=5656'

最佳答案

该函数使用“贪婪”匹配。你不想要那个。在 PHP 中,您可以在通配符后面加上 ?。指定非贪婪匹配,如:

$pattern = '/var (.*?=\d)/';

或使用 U旗帜 as documented here ,如:
$pattern = '/var (.*=\d)/U';

这将使所有通配符使用非贪婪匹配。

编辑:另外,由于您包含“var”,您可能需要将其更改为
$pattern = '/var (.*?=\d)*/';

或者
$pattern = '/var (.*=\d)*/U';

匹配任意数量的 (.*=\d)模式。

编辑:每次讨论更新:

PHP

$page = "var a=23434,bc=3434,erd=5656,ddfeto='dsf3df34dff3',eof='sdfwerwer34',wer=4554;";
$pattern = '/([a-zA-Z]+=\d+)/';

preg_match_all($pattern,$page,$matches);


print_r($matches[1]);

生产
Array
(
[0] => a=23434
[1] => bc=3434
[2] => erd=5656
[3] => wer=4554
)

注意:这会过滤掉 RHS 用单引号括起来的条目。如果你不想这样,请告诉我们。

编辑#2 : 我对你问题的回答超出了评论框的大小,所以我编辑了我的答案。
[a-zA-z]表达式仅匹配任何一种情况的字母字符。请注意,更新后的代码还删除了“不贪婪”修饰符,所以我们现在实际上希望它是贪婪的。由于我们希望它是贪婪的, .会“吃”太多。来吧,玩弄代码,看看当你把它改成 .* 时会发生什么这是一个熟悉正则表达式的好机会。

由于 . “吃”太多了,我们需要限制它从匹配所有字符到匹配我们想要的字符。我们可以使用类似的东西
$pattern = '/([^\s,]*=\d+)/';
[^\s,]*将匹配任意数量的非空白、非逗号字符。这也适用于您的测试用例。

但是在这种情况下,我们可以自信地说出我们想要包含的字符是什么,所以我们不会将字符“列入黑名单”,而是将它们“列入白名单”。在这种情况下,我们指定我们要匹配任何一种情况下的任何字母字符。

与许多事情一样,特别是在编程中,有很多方法可以给猫剥皮。有许多替代正则表达式模式也适用于您的测试用例。由您来了解每个限制,它们将如何在边缘情况下执行,以及它们的可维护性,并做出决定。

关于php - 匹配初始化的整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11187693/

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