Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
涉及日语的PHP正则表达式_Php_Regex_Unicode_Preg Match All - Fatal编程技术网

涉及日语的PHP正则表达式

涉及日语的PHP正则表达式,php,regex,unicode,preg-match-all,Php,Regex,Unicode,Preg Match All,我的目标是过滤一个MicrosoftWord文档(.docx),其中包含所有日文汉字和假名。 我目前使用的代码如下: preg_match_all('~[\x{4e00}-\x{9faf}]([\x{3040}-\x{309f}]) \= ([a-z]) \=+~u', $data, $matches); 根据一些研究,我发现日语文本的unicode值如下: 我正在处理的数据示例如下所示: 時(とき) = toki=时间;小时;场合;时刻を = wo=标记句子直接宾语的助词(時 = 时间)超え

我的目标是过滤一个MicrosoftWord文档(.docx),其中包含所有日文汉字和假名。 我目前使用的代码如下:

preg_match_all('~[\x{4e00}-\x{9faf}]([\x{3040}-\x{309f}]) \= ([a-z]) \=+~u', $data, $matches);
根据一些研究,我发现日语文本的unicode值如下:

我正在处理的数据示例如下所示:

時(とき) = toki=时间;小时;场合;时刻を = wo=标记句子直接宾语的助词(時 = 时间)超えて(こえて) = 科特=交叉

我的最终目标是能够以类似的模式运行preg_match_all获取数据,就像”超えて(こえて) = 科伊特” 之前的信息(以及()内部的信息)和之后的罗马化介于之间==

我要查找的结果是返回的数组,如下所示:

array(
    0 => array('時', 'とき', 'toki'),
    1 => array('超えて', 'こえて', 'koete')
);

每个数组中的第一个结果包括“汉字、平假名,可能还有片假名”虽然第二个结果只有平假名,第三个结果只有普通的字母字符。我对正则表达式和添加Japaense unicode不太在行,我不知道,任何帮助都将不胜感激!谢谢!

如果使用
/u
修饰符,您可以使用特殊的unicode正则表达式占位符而不是数字范围:

preg_match_all('/
    ([\p{Han}\p{Katakana}\p{Hiragana}]+)    # Kanji
    (?: [(]                                 # optional part: paren (
    ([\p{Hiragana}]+)                       # Hiragana
    [)] )?                                  # closing paren )
    \s*=\s*                                 # spaces and =
    ([\w\s;=]+)                             # English letters
    /ux',
    $source,  $matches, PREG_SET_ORDER
);
print_r($matches);
我注意到parens中的平假名是可选的,所以我用
(?:…)?
使您的正则表达式更加复杂,它将该部分进行了可选化

请注意,结果顺序有点不同,因为preg_match_all在索引[0]中保留完整的匹配字符串,通常:

[0] => Array
    (
        [0] => 時(とき) = toki = time; hour; occasion; moment
        [1] => 時
        [2] => とき
        [3] => toki = time; hour; occasion; moment
    )