Php 为什么在下面的程序中,匿名函数没有获得作为参数传递给它的整个数组或字符串?
考虑以下工作代码:Php 为什么在下面的程序中,匿名函数没有获得作为参数传递给它的整个数组或字符串?,php,arrays,string,arguments,anonymous-function,Php,Arrays,String,Arguments,Anonymous Function,考虑以下工作代码: <?php echo preg_replace_callback('~-([a-z])~', function ($match) { /*Below var_dump() outputs array(2) { [0]=> string(2) "-w" [1]=> string(1) "w" } var_dump($match);*/
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
/*Below var_dump() outputs
array(2) {
[0]=>
string(2) "-w"
[1]=>
string(1) "w"
}
var_dump($match);*/
return strtoupper($match[1]);
}, 'hello-world');
// outputs helloWorld
?>
我会在这里解释 你的Regx
“~-([a-z])~”
说:
文字,匹配-
一次-
捕获组,返回匹配结果(…)
字符集,通过[a-z]
匹配z
a
0
和1
0
是Regx匹配的所有内容(包括-
)。1
是first
capture组中的所有内容
因此,当你给它hello world
时,匹配从-
开始,在第一个[a-z]
或在本例中是aw
之后结束
现在,如果您添加了另一个捕获组,那么您将拥有match2
。例如:
'~-([a-z])([a-z])~'
您将得到类似于[0=>'-wo',1=>'w',2=>'o']
的结果
在线测试,在这里:
如果你把它改成
'~-([a-z]+)~'
它会给你
[0=>'-world',1=>'world']
,因为+
匹配一次或多次,所以它匹配整个单词。这里我将解释它
你的Regx“~-([a-z])~”
说:
文字,匹配-
一次-
捕获组,返回匹配结果(…)
字符集,通过[a-z]
匹配z
a
0
和1
0
是Regx匹配的所有内容(包括-
)。1
是first
capture组中的所有内容
因此,当你给它hello world
时,匹配从-
开始,在第一个[a-z]
或在本例中是aw
之后结束
现在,如果您添加了另一个捕获组,那么您将拥有match2
。例如:
'~-([a-z])([a-z])~'
您将得到类似于[0=>'-wo',1=>'w',2=>'o']
的结果
在线测试,在这里:
如果你把它改成
'~-([a-z]+)~'
它将为您提供[0=>'-world',1=>'world']
,因为+
匹配了一次或多次,所以它匹配整个单词。无法避免“完整字符串匹配”(输出数组中的[0]
元素)。可以避免的是使用捕获组(以减少输出数组膨胀并提高regex效率)。您需要匹配连字符和字母,并且只返回字母——这样连字符就被删除了
下面是一个没有输出数组膨胀的等效方法:()
输出:
helloWorld
“fullstring匹配”(输出数组中的[0]
元素)是不可避免的。可以避免的是使用捕获组(以减少输出数组膨胀并提高regex效率)。您需要匹配连字符和字母,并且只返回字母——这样连字符就被删除了
下面是一个没有输出数组膨胀的等效方法:()
输出:
helloWorld
我只是添加了另一个(可能是多余的)答案,因为我认为您主要误解了匿名/回调函数的任务。➜ 它应该做的很少
基本上这就是逻辑流程:
'hello-world'
'-w'
[“-w”,“w”]
(@mickmack已经解释了原因)
- 它从不工作,也不需要整个原始输入(
)helloworld
- 因为它的意思是只将第二个单词的第一个字母大写,所以处理
就足够了$match[1]
- 因此,它只返回
'W'
- 回调函数的任务不是对整个/原始字符串进行替换
- 它将从匿名函数返回的与正则表达式匹配的
替换为大写的'-w'
'w'
- 正如@ArtisticPhoenix所解释的,您可以更改regex和match,并让回调函数“更好地查看”手头的任务
'hello-world'
'-w'
[“-w”,“w”]
(@mickmack已经解释了原因)
- 它从不工作,也不需要整个原始输入(
)helloworld
- 因为它的意思是只将第二个单词的第一个字母大写,所以处理
就足够了$match[1]
- 因此,它只返回
'W'
- 回调函数的作业<