【问题标题】:php preg_split with special chars带有特殊字符的 php preg_split
【发布时间】:2012-06-08 11:44:33
【问题描述】:
$tags = preg_split('@ @', 'Hello World 1 2  3 45   54', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);
$tags = preg_split('/ /', 'Hello World 1 2  3 45   54', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);

$tags = preg_split('@/@', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);
$tags = preg_split('/\//', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
print_r($tags);

为什么最后一个不起作用?,@ 和 / 用于构建 php regex 的区别到底是什么?

谢谢澄清

【问题讨论】:

  • 既然'@/@' 和'/\//' 没有理由不同,您能告诉我们您的PHP 版本吗?
  • 好的(根据你对thebod的回复),所以问题不是PHP而是你使用的网站,看我的回答
  • 知道有什么好的在线php脚本测试器吗?
  • 无论你在这种网站上能做什么,在命令行上都能做得更好。谷歌命令行 php。如果您需要 HTML 输出,共享主机解决方案最适合您。
  • php filename.php意义上的命令行

标签: php regex preg-split


【解决方案1】:

您使用的工具writecodeonline.com/php 已损坏。 如果您将默认代码更改为

echo 'Hello\ World';

它应该像它那样输出Hello\ World,而不是Hello World。

这解释了为什么'/\//' 会中断:此工具将其视为'///',这不是有效的正则表达式。但是,双反斜杠被正确解释:'/\\//' 有效(但这是因为 PHP “看到”'/\//',相当于 '/\\//')。

再检查一次:

echo strlen('///'), ' ', strlen('/\//'), ' ', strlen('/\\//');

应该打印3 4 4。在writecodeonline.com/php 上打印3 3 4。

【讨论】:

    【解决方案2】:

    最后一个在我的机器上运行良好(PHP 5.3.10,但应该可以在任何地方运行):

    thebod@dockmaster:~/Sites$ php
    <?php
    $tags = preg_split('/\//', '1/2//3', NULL, PREG_SPLIT_NO_EMPTY);
    print_r($tags);
    /////////////////
    Array
    (
        [0] => 1
        [1] => 2
        [2] => 3
    )
    

    @ 和 / 之间也没有区别,#、~ 和 : 也是用于分隔正则表达式和修饰符的常用字符。 查看 php.net 了解更多信息:http://de.php.net/manual/en/regexp.reference.delimiters.php

    【讨论】:

    • 应该也可以在 php 5.0 上工作,最好在自己的机器上检查这些代码,这些在线工具总是有很多限制(反斜杠可能有问题)
    【解决方案3】:

    基本上@和/之间没有区别,因为您可以使用任何特殊字符进行预匹配。请注意以您使用的相同字符开始和结束

    【讨论】:

      猜你喜欢
      • 2021-05-14
      • 2014-10-28
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 2012-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多