在PHP diacritics之前和之后字母生成单词边界(\b
),这不是所希望的行为。其他编程语言是否正常? (我知道大多数语言都有\b
和\w
的问题)我应该如何有效地解决这个问题?
从Unicode角度来看哪个Unicode类别会产生单词边界?
这是一个例子:
<?php
preg_match_all('#\bج\b#u','مَجْل',$t); // the font of this site does not display diacritics
var_dump($t);
答案 0 :(得分:1)
在PCRE中:
\ d \ p {Nd}匹配的任何字符(十进制数字)
\ s \ p {Z}匹配的任何字符,加上HT,LF,FF,CR
\ w \ p {L}或\ p {N}匹配的任何字符,加上下划线
根据\w
定义,您可以在Unicode模式下推断\b
定义。因此,即使对于字符串Åström
(分解的字符),逻辑具有两个字边界,也会检测到多个字边界*A*̊*stro*̈*m*
。
答案 1 :(得分:0)
这只是一种解决方法:
preg_match_all('#(\p{M}*\p{Arabic}*\p{M}*)*ج(\p{M}*\p{Arabic}*\p{M}*)*#u','مَجْل جميل testجواد',$t); // the font of this site does not display diacritics
print_r(array_filter(array_map('array_filter', $t)));
输出:
Array
(
[0] => Array
(
[0] => مَجْل
[1] => جميل
[2] => جواد
)
)
我发现\p{M}
将匹配 teshkil ,而\p{Arabic}
将匹配阿拉伯字母。