2013-10-04 35 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