我试图分割(与preg_split)文本与许多外国字符和数字成长度>= 2的单词和数字,没有标点符号。现在我有了这段代码,但它只分成单词,而不考虑数字和长度>= 2。请问我能做些什么?
$text = 'abc 文 字化け, efg Yukarda mavi gök, asağıda yağız yer yaratıldıkta; (1998 m. siejės 7 d.). Ton pate dėina bandomkojė бойынша бірінші орында тұр (79.65 %), айына 41';
$splitted = preg_split('#'P{L}+#u', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
预期结果应为:array('abc', '字化け', 'efg', 'Yukarda', 'mavi', 'gök', 'asağıda', 'yağız', 'yer', 'yaratıldıkta', '1998', 'siejės', 'Ton', 'pate', 'dėina', 'bandomkojė', 'бойынша', 'бірінші', 'орында', 'тұр', '79.65', 'айына', '41');
注意:已经尝试了这些文档link1 &Link2,但我不能得到它的工作:-/
使用preg_match_all来代替,然后您可以检查长度条件(这在preg_split中很难做到,但并非不可能):
$text = 'abc 文 字化け, efg Yukarda mavi gök, asağıda yağız yer yaratıldıkta; (1998 m. siejės 7 d.). Ton pate dėina bandomkojė бойынша бірінші орында тұр (79.65 %), айына 41';
preg_match_all('~'p{L}{2,}+|'d{2,}+(?>'.'d++)?|'d'.'d++~u',$text,$matches);
print_r($matches);
解释:
p{L}{2,}+ # letter 2 or more times
| # OR
'd{2,}+ # digit 2 or more times
(?>'.'d++)? # can be a decimal number
| # OR
'd'.'d++ # single digit MUST be followed by at least a decimal
# (length constraint)
在只匹配作为单词一部分的数字之前,使用一个小技巧匹配以点分隔的数字:
preg_match_all("#(?:'d+'.'d+|'w{2,})#u", $text, $matches);
$splitted = $matches[0];
http://codepad.viper - 7. - com/x7ln1v
将CJK拆分为"words"是没有意义的。每个字符是一个单词。如果您使用空格,则可以将您分成短语。
所以这取决于你真正想要完成什么。如果对文本进行索引,则需要考虑双字母和/或CJK习语。