没有编号数组的PHP子模式

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了没有编号数组的PHP子模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
PReg_match与子模式一起使用时,始终返回具有相同数据的双键数组,一个具有子模式名称,另一个使用数字标记.因为我匹配成千上万行每行几千字节,我担心数字数组会占用额外的内存.有没有正确的方法来禁用数字标签数组返回?

例:

<?PHP

header('Content-tyPE: text/plain');

$data = <<<START
I go to school.
He goes to funeral.
START;
preg_match_all('@^(?<who>.*?) go(es)* to (?<place>.*?)$@m',$data,$matches);
print_r($matches);

?>

输出

Array
(
    [0] => Array
        (
            [0] => I go to school.
            [1] => He goes to funeral.
        )

    [who] => Array
        (
            [0] => I
            [1] => He
        )

    [1] => Array
        (
            [0] => I
            [1] => He
        )

    [2] => Array
        (
            [0] => 
            [1] => es
        )

    [place] => Array
        (
            [0] => school.
            [1] => funeral.
        )

    [3] => Array
        (
            [0] => school.
            [1] => funeral.
        )

)

解决方法

php.net- Subpatterns

我看不到只按名称给出索引的选项.

所以,我认为,如果你不想要这个数据两次,唯一的可能是:不要使用命名组.

这真的是一个问题吗? IMO只有在遇到问题时才会对此进行优化,因为这会占用额外的内存!提高可读性应该值得记忆!

更新

看起来像go(es)*应该只匹配一个可选的“es”.在这里,您可以使用非捕获组来节省内存.

preg_match_all('@^(?<who>.*?) go(?:es)? to (?<place>.*?)$@m',$matches);

通过以?开始组:不存储匹配的内容.我还替换了*表示0或更多,并且还将匹配“goeseses”与?这意味着0或1.

脚本宝典总结

以上是脚本宝典为你收集整理的没有编号数组的PHP子模式全部内容,希望文章能够帮你解决没有编号数组的PHP子模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。