php preg_split带有特殊字符

时间:2012-06-08 11:44:34

标签: php regex preg-split

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

要求澄清

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

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