簡體   English   中英

如何在PHP中使用正則表達式將文本拆分為Unicode單詞

[英]How to split text into Unicode words with Regular Expression in PHP

我有一個網站模塊,它從twitter收集一些推文,並將它們分成文字放入數據庫。 但是,由於推文通常有土耳其字符[ıöüğşçİÖÜĞŞÇ],我的模塊不能正確划分單詞。

例如,短語Aynılabdaçalıştığım分為Aynlabdaalıştığım ,但它本應分為Aynılabdaçalıştığım

這是我的代碼,它完成了這項工作:

preg_match_all('/(\A|\b)[A-Z\Ç\Ö\Ş\İ\Ğ\Ü]?[a-z\ç\ö\ş\ı\ğ\ü]+(\Z|\b)/u', $text,$a);

你認為這里有什么問題?

重要說明:我不會因空格字符拆分文本而愚蠢,我需要完全匹配這些字符。 我不想要任何數字或特殊字符,如[,。!@#$ ^&* 123456780]。

我需要一個正則表達式,將分裂這個kısaisimleriile“Vic”ve“Wick”vardı。

進入這個:

kısa
isimleri
ile
Vic
ve
Wick
vardı

更多例子:

我們是@test會的

We
re
test

Fööbär,我們@testto0ÅÄÖ - 123好嗎? kthxbai? 分成這個,

b
r
we
re
test
ok
kthxbai

但我希望它是:

Föö
bär
we
re
test
ÅÄÖ
ok
kthxbai

我會看看mb_split()

$str = 'We\'re @test Aynı labda çalıştığım';
var_dump(\mb_split('\s', $str));

給我:

array
  0 => string 'We're' (length=5)
  1 => string '@test' (length=5)
  2 => string 'Aynı' (length=5)
  3 => string 'labda' (length=5)
  4 => string 'çalıştığım' (length=16)

這個表達式會給你想要的結果(根據你的例子):

/(?<!\pL|\pN)\pL+(?!\pL|\pN)/u

\\pL匹配任何unicode字母。 需要使用外觀來確保不遵循或先於數字,以完全排除包含任何數字的單詞。

示例

$str = "Aynı, labda - çalıştığım? \"quote\". Föö bär, we're @test to0 ÅÄÖ - 123 ok? kthxbai?";
preg_match_all('/(?<!\pL|\pN)\pL+(?!\pL|\pN)/u', $str, $m);
print_r($m);

輸出:

Array
(
    [0] => Array
        (
            [0] => Aynı
            [1] => labda
            [2] => çalıştığım
            [3] => quote
            [4] => Föö
            [5] => bär
            [6] => we
            [7] => re
            [8] => test
            [9] => ÅÄÖ
            [10] => ok
            [11] => kthxbai
        )

)

只匹配字邊界之間放置的任何非空格字符。

preg_match_all('/\b(\S+)\b/', $text, $a);

這樣,內部的字符無關緊要,只要它不是空格,它就會匹配它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM