查找具有特殊字符的字符串的最后一个单词


Find last word of a string that has special characters

我正在尝试将span标记添加到字符串的最后一个单词。如果字符串没有特殊字符,它就会起作用。我想不出正确的正则表达式。

$string = "Onun Mesajı";
echo preg_replace("~'W'w+'s*'S?$~", ' <span>' . '''0' . '</span>', $string);

这是土耳其语字符集:ÇŞĞÜÖİçşğüöı

您需要使用/u修饰符来允许处理模式和输入字符串中的Unicode字符。

preg_replace('~'w+'s*$~u', '<span>$0</span>', $string); 
                       ^

完整的PHP演示:

$string = "Onun Mesajı";
echo preg_replace("~'w+'s*$~u", '<span>$0</span>', $string);

此外,您需要的正则表达式只是'w+'s*$:

  • 'w+-1个或多个字母数字
  • 's*-0个或更多空白(尾随)
  • $-字符串末尾

由于我从正则表达式中删除了'W,因此无需对替换字符串中的前导空格进行"硬编码"(也已删除)。

您应该对正则表达式使用u修饰符来将引擎设置为unicode模式:

<?php
$subject = "Onun äöüß Mesajı";
$pattern = '/'w+'s*?$/u';
echo preg_replace($pattern, '<span>''0</span>', $subject);

输出为:

Onun äöüß <span>Mesajı</span>

此regex将为您完成任务,并且比其他解决方案短得多:

[ ](.*?$)

下面是一个例子:

$string = "Onun Mes*ÇŞĞÜÖİçşğüöıajı";
echo preg_replace('~[ ](.*?$)~', ' <span>' .'${1}'. '</span>', $string);

将回声输出:

Onun <span>Mes*ÇŞĞÜÖİçşğüöıajı</span>

这个正则表达式的工作方式是,我们在懒惰模式[ ].*?中查找任何没有空格的字符
然后我们添加$标识符,使其从字符串末尾匹配。