gpt4 book ai didi

php - preg_replace 不适用于某些单词/字符

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:43:32 25 4
gpt4 key购买 nike

$str = 'کس نے موسیٰ کے بارے میں سنا ہے؟';
$str = preg_replace('/(?<=\b)موسیٰ(?=\b)/u', 'Musa', $str);
$str = preg_replace('/(?<=\b)سنا(?=\b)/u', 'suna', $str);
echo $str;

这无法替换 موسیٰ。它应该给出 کس نے Musa کے بارے میں suna ہے؟ 而不是给出 کس نے موسیٰ کے بارے میں suna ے͟

所有以 ٰ 结尾的单词都会发生这种情况,例如 تعالیٰ 。它适用于 ٰ 位于单词中间的单词(没有以 ٰ 开头的单词)。这是否意味着 \b 不能与 ٰ 一起使用?是错误吗?

最佳答案

原因是单词边界在以下位置匹配:

  • Before the first character in the string, if the first character is a word character.
  • After the last character in the string, if the last character is a word character.
  • Between two characters in the string, where one is a word character and the other is not a word character.

“违规”符号是 U+0670 ARABIC LETTER SUPERSCRIPT ALEF 属于 \p{Mn} (非间距标记 Unicode 类别),因此是一个非文字符号\b如果前面有属于 \w 的字符,则将匹配(字母、数字、_)。

仅当搜索短语前面/后面没有字符字符时,才使用明确的边界:

$str = 'کس نے موسیٰ کے بارے میں سنا ہے؟';
$str = preg_replace('/(?<!\w)موسیٰ(?!\w)/u', 'Musa', $str);
$str = preg_replace('/(?<!\w)سنا(?!\w)/u', 'suna', $str);
echo $str; // => کس نے Musa کے بارے میں suna ہے؟

参见 PHP demo .

(?<!\w)是一个否定的后视,确保在随后的消费模式之前没有单词 char,并且 (?!\w)是一个否定前瞻,确保在前面的消费模式之后没有单词 char。

关于php - preg_replace 不适用于某些单词/字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com