簡體   English   中英

修復php標記化模式

[英]fixing a php tokenizing pattern

我有一個Perl腳本,可以對字符串進行標記

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

因此,如果我有一個字符串$s="The large [[bear]] is dangerous."

它將返回array("The large", " [[", "bear", "]] ", "is dangerous", ".")

但是當我在php腳本上使用regex模式時,它似乎不起作用。

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

有誰知道這個問題嗎?

運行它( 演示 ):

$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]+)/';

這個:

\'

當字符串用雙引號分隔時,這是不正確的。 這將是一個實際的反斜杠,后跟一個引號字符。

還有這些:

\-\'\,\.

只需直接將它們寫成沒有反斜杠即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM