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 に答える