我是PHP新手,我有以下代码,我基本上希望找到
之间的所有关键字'<#'和'#>'
示例代码:
<?php
$subject = "askdbvbaldjbvasdblasdbvl<#2134#>cbkdbskbkabdvb<#213aca4#>";
$pattern = "/(?<=\<\#)(.*?)(?=\#\>)/";
preg_match_all($pattern, $subject, $matches);
echo '<pre>',print_r($matches,true),'</pre>';
?>
现在我期待一个像:
这样的值数组Array
(
[0] => Array
(
[0] => 2134
[1] => 213aca4
)
)
但我得到的输出如下:
Array
(
[0] => Array
(
[0] => 2134
[1] => 213aca4
)
[1] => Array
(
[0] => 2134
[1] => 213aca4
)
)
任何人都可以告诉我为什么我得到第二个数组,我怎么能摆脱它...
答案 0 :(得分:3)
第二个数组包含子匹配或匹配的组,因为您正在使用捕获组。
只需删除正则表达式中的parens:
$pattern = "/(?<=\<\#).*?(?=\#\>)/";
此外,您应该能够使用此正则表达式而不会有任何遗漏:
$pattern = "/(?<=<#).*?(?=#>)/";