【问题标题】:fixing a php tokenizing pattern修复 php 标记模式
【发布时间】:2011-08-08 19:46:46
【问题描述】:

我有一个对字符串进行标记的 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);

有人知道这个问题吗?

【问题讨论】:

  • 也许是因为模式不同?另外,请更具体地说明“不起作用”。它应该做什么或不做什么?

标签: php regex perl tokenize preg-split


【解决方案1】:

让它运行 (Demo):

$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 标志。

Single quoted StringsDocspreg_splitDocs

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

$pattern = '/([^a-zA-Z \t]+)/';

【讨论】:

  • 虽然它没有拆分点(.)、逗号(,)和单引号(')
  • 空格也不同。如果您想在标点处拆分,只需将它们从模式中删除即可。 - 添加了另一个示例,仍然没有像 perl 中那样添加空格。
【解决方案2】:

这个:

\'

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

还有这些:

\-\'\,\.

直接写,不用反斜杠。

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2021-03-23
    • 2012-04-06
    • 1970-01-01
    • 2021-10-03
    • 2020-02-04
    • 2013-11-26
    • 1970-01-01
    相关资源
    最近更新 更多