0

我有一个标记字符串的 Perl 脚本

@s=split /([^a-zA-Z \t\-\'\,\.]+)/, $_[0];  # tokenized with separators

所以如果我有一个字符串$s="The large [[bear]] is dangerous."

它会回来array("The large", " [[", "bear", "]] ", "is dangerous", ".")

但是当我在 php 脚本上使用它时,正则表达式模式似乎不起作用。

$tokens = preg_split("/[^a-z \t\-\'\,\.]+/i", $s);

有人知道这个问题吗?

4

2 回答 2

1

让它运行(演示):

$s="The large [[bear]] is dangerous.";
$pattern = '/([^a-zA-Z \t\-\\\'\,\.]+)/';    
$tokens = preg_split($pattern, $s, NULL, PREG_SPLIT_DELIM_CAPTURE);    
print_r($tokens);

输出:

Array
(
    [0] => The large
    [1] => [[
    [2] => bear
    [3] => ]]
    [4] =>  is dangerous.
)

细节:

  • 模式必须在 PHP 中正确地表示为字符串,注意字符串转义序列。在单引号字符串\'中写为\\\'.
  • 您想要拆分包括分隔符,您需要使用PREG_SPLIT_DELIM_CAPTURE标志。

请参阅单引号字符串文档preg_split文档

编辑:要在标点符号处拆分,只需将它们从模式中删除(Demo):

$pattern = '/([^a-zA-Z \t]+)/';
于 2011-08-08T19:54:13.703 回答
0

这:

\'

当您的字符串由双引号分隔时不正确。它将是一个实际的反斜杠,后跟一个引号字符。

还有这些:

\-\'\,\.

只需直接写它们而不用反斜杠。

于 2011-08-08T19:51:50.967 回答