涉及日语的PHP正则表达式

Bry*_*jer 6 php regex unicode preg-match-all

我的目标是通过Microsoft Word文档(.docx)过滤所有日语汉字和假名.我正在使用的当前代码如下:

preg_match_all('~[\x{4e00}-\x{9faf}]([\x{3040}-\x{309f}]) \= ([a-z]) \=+~u', $data, $matches);
Run Code Online (Sandbox Code Playgroud)

根据一些研究,我发现日文文本的unicode值如下:http://www.rikai.com/library/kanjitables/kanji_codes.unicode.shtml

我正在使用的数据示例如下所示:

时(とき)= toki =时间; 小时; 场合; 时刻を= wo =粒子标记句子的直接对象(时=时间)超えて(こえて)= koete = cross

我的最终目标是能够以类似的模式运行preg_match_all获取数据,看起来像"超えて(こえて)= koete"之前的信息(以及里面的信息()和之后的罗马化= =

我正在寻找的结果将是一个返回的数组,看起来像:

array(
    0 => array('?', '??', 'toki'),
    1 => array('???', '???', 'koete')
);
Run Code Online (Sandbox Code Playgroud)

每个数组的第一个结果包括"汉字,平假名,可能还有片假名",而第二个结果只有平假名,第三个结果只是普通的字母字符.我对正则表达式并不是很好,并添加了Japaense unicode,我很无能为力,任何帮助都会非常感激!谢谢!

mar*_*rio 3

如果使用修饰符,则可以使用特殊的 Unicode 正则表达式占位符来代替数字范围/u

\n\n
preg_match_all('/\n    ([\\p{Han}\\p{Katakana}\\p{Hiragana}]+)    # Kanji\n    (?: [(]                                 # optional part: paren (\n    ([\\p{Hiragana}]+)                       # Hiragana\n    [)] )?                                  # closing paren )\n    \\s*=\\s*                                 # spaces and =\n    ([\\w\\s;=]+)                             # English letters\n    /ux',\n    $source,  $matches, PREG_SET_ORDER\n);\nprint_r($matches);\n
Run Code Online (Sandbox Code Playgroud)\n\n

我注意到括号中的平假名是可选的,因此我使您的正则表达式变得更加复杂,从而(?: ... )?可以选择该部分。

\n\n

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

\n\n
[0] => Array\n    (\n        [0] => \xe6\x99\x82(\xe3\x81\xa8\xe3\x81\x8d) = toki = time; hour; occasion; moment\n        [1] => \xe6\x99\x82\n        [2] => \xe3\x81\xa8\xe3\x81\x8d\n        [3] => toki = time; hour; occasion; moment\n    )\n
Run Code Online (Sandbox Code Playgroud)\n