1
$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正则表达式的区别到底是什么?

谢谢澄清

4

3 回答 3

2

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

echo 'Hello\ World';

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

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

再检查一次:

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

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

于 2012-06-08T12:36:04.240 回答
1

最后一个在我的机器上运行良好(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

于 2012-06-08T11:49:58.920 回答
0

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

于 2012-06-08T11:50:21.497 回答