2011-08-21 41 views
2

我试图使用正则表达式在日语句子中匹配汉字化合物。如何区分正则表达式| (OR)表达式?

现在,我使用/ ((.)*) /在匹配空格分隔的化合物,例如,彼はそこに ひと人 でいた。

的问题是,在某些句子中的单词开头,或遵循的标点符号。防爆。 いっ瞬 の間が生まれた。一昨じつ、彼らはそこを出発した。

我已经试过像/ ((.)*) |^((.)*) | ((.)*)、 etc.但这匹配彼はそこに ひと人而不是ひと人彼はそこに ひと人 でいた。

有什么办法收拾这一切都在一个单一的正则表达式,或者我必须使用一个,检查是否它返回任何东西,然后尝试另一个如果不是?

谢谢!

P.S .:我使用PHP来解析句子。

+1

你试过用字边界('\ b')吗? –

+0

你使用什么语言/正则表达式实现? – Gumbo

+0

\ b似乎没有帮助,甚至与日本人一起工作。 –

回答

0

思考了很长一段时间,我相信没有办法来解析这些化合物没有界定他们都用空格或任何其他字符之后是我现在正在做的:)

Ex。如果句子是私は ノート、ペンなどが必要だ。,计算机无法知道它是否应该选择是否为私は(开始句子&空格分隔)或ノート(空格&逗号分隔)。

谢谢大家的建议...

1

我想这:/([^ 、]+)/应该与你给的例子的话(你可能希望从隔开添加其他一些字终止字符,如果你在你的文字让他们(或使用\pL,而不是[^ 、]覆盖所有UTF字母。

<?                                       
preg_match_all('/[^ 、]+/u', "彼らは日本の 国民 となった。", $m); 
print_r($m); 

输出

Array 
(
    [0] => Array 
     (
      [0] => 彼らは日本の 
      [1] => 国民 
      [2] => となった。 
     ) 
) 
+0

当我使用'/([^,] *)/'在'彼の日本の国民となった.'时,它将返回'日本の国民'而不是'国民'。 '/((。)*?)/'返回'国民'为'彼らは日本の国民となった。(正确),但是'いっの瞬间が生まれた。开始。 –

0

你只是想根据一些模式(空格或标点符号)来分割你的字符串,这是真的吗? 这是怎么回事?

In [51]: word = '.test test\n.test' 
In [53]: re.split('[\s,.]+',word) 
Out[53]: ['', 'test', 'test', 'test'] 
1

假设你输入的是UTF-8,你可以用

'/(\pL+)/u' 

\pL+匹配一个或字符串中更信试试。

例子:

$str = '彼はそこに ひと人 でいた。'; 

preg_match_all('/(\pL+)/u', $str, $matches); 

var_dump($matches[0]); 

输出:

array(3) { 
    [0]=> 
    string(15) "彼はそこに" 
    [1]=> 
    string(9) "ひと人" 
    [2]=> 
    string(9) "でいた" 
}