$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正则表达式的区别是什么?
要求澄清
答案 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)
基本上@和/之间没有区别,因为你可以使用任何特殊字符来匹配。请注意以您使用的相同字符开头和结尾