исправление паттерна php-токенизации - PullRequest
0 голосов
/ 08 августа 2011

У меня есть 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);

Кто-нибудь имеет представление о проблеме?

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Запустил ( Демо ):

$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, помните о escape-последовательностях строк.В единственной строке в кавычках \' записывается как \\\'.
  • Если вы хотите разделить, включая разделители, вам необходимо использовать флаг PREG_SPLIT_DELIM_CAPTURE.

См. Строки в одинарных кавычках Документы и preg_split Документы

Редактировать: Чтобы разделить знаки препинания, просто удалите их из шаблона ( Демо ):

$pattern = '/([^a-zA-Z \t]+)/';
0 голосов
/ 08 августа 2011

Это:

\'

Неправильно, когда ваша строка разделена двойными кавычками.Это будет фактическая обратная косая черта, за которой следует символ кавычки.

И это также:

\-\'\,\.

Просто напишите их без обратной косой черты.

...