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,我很无能为力,任何帮助都会非常感激!谢谢!
如果使用修饰符,则可以使用特殊的 Unicode 正则表达式占位符来代替数字范围/u:
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);\nRun Code Online (Sandbox Code Playgroud)\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 )\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2231 次 |
| 最近记录: |