如何优先考虑正则表达式(或)表达?

时间:2011-08-21 12:47:26

标签: php regex alternation

我正在尝试使用正则表达式在日语句子中匹配汉字化合物。

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

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

我尝试了/ ((.)*) |^((.)*) | ((.)*)、 etc.之类的内容,但这与彼はそこに ひと人

中的ひと人代替彼はそこに ひと人 でいた。相匹配

有没有办法将所有这些打包在一个正则表达式中,或者我是否必须使用一个,检查它是否返回任何内容,然后再尝试另一个?

谢谢!

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

4 个答案:

答案 0 :(得分:1)

我认为:/([^ 、]+)/应与您给出的示例中的单词相匹配(您可能希望在空格中添加一些其他单词终止字符,如果您在文本中有这些字符(或使用{ {1}}代替\pL来覆盖所有UTF字母。

示例

[^ 、]

输出

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

答案 1 :(得分: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) "でいた"
}

答案 2 :(得分:0)

你只是想根据某种模式(空格或标点符号)拆分你的字符串,这是真的吗? 那这个呢?

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

答案 3 :(得分:0)

在考虑了很长一段时间后,我相信没有办法解析化合物而不用空格或任何其他字符来区分它们,这就是我现在正在做的事情:)

实施例。如果句子是私は ノート、ペンなどが必要だ。,则计算机无法知道它是私は(开始句子和空格分隔)还是ノート(空格和逗号分隔)是它应该选择。

感谢大家的建议......