2013-10-04 34 views
2

適當抵消目前,我試圖找到某個系列的混合字符串中的字符的位置(與日本UTF-8字符和英文字符)。我現在拉比賽和偏移,像這樣:preg_match_all返回使用UTF-8 PHP

preg_match_all($regex, $string, $allmatches, PREG_OFFSET_CAPTURE);  

但偏移似乎是當有我的匹配字符串前面日文字符過於龐大。

  1. こんいちはabcd MATCH こんばんは
  2. abcdeabcd MATCH abcde

兩個那些字符串的偏移量應該是10,但preg_match_all返回一個比這更高的編號爲日文字符的字符串。

我怎樣才能確保偏移是所有字符串的標準呢?

編輯:對於那些有興趣,我的正則表達式是很基本的。只需設置爲匹配一系列空格:/(+){3}/iu

+0

你能告訴我們你的正則表達式? – Toto

+0

你並不真正需要的正則表達式,我剛剛與提供的字符串和匹配「匹配」做到了,它返回不同的偏移值。 – Luke

回答

1

解決它自己,用一種迂迴的方法,但它的工作原理,關鍵是這個表達式:

/[一-龠]|[ぁ-ゔ]|[ァ-ヴー]|[a-zA-Z0-9]|[a-zA-Z0-9][々〆〤]/u

我用,爲的preg_replace任何字符一個數字號碼,然後在新字符串中找到偏移量。

0

您必須將/ u修飾符添加到$ regex以匹配unicode字符。

$regex = "/MATCH/u"; 

參見:Pattern Modifiers

+0

謝謝!但這是我嘗試的第一件事情之一。我的日語字符串仍然有很大的偏移量。 – GhostCode