我正在尝试将span
标记添加到字符串的最后一个单词中。如果字符串没有特殊字符,它就有效。我无法弄清楚正确的正则表达式。
$string = "Onun Mesajı";
echo preg_replace("~\W\w+\s*\S?$~", ' <span>' . '\\0' . '</span>', $string);
以下是土耳其语字符集:ÇŞĞÜÖİçşğüöı
答案 0 :(得分:4)
您需要使用/u
修饰符来允许处理模式和输入字符串中的Unicode字符。
preg_replace('~\w+\s*$~u', '<span>$0</span>', $string);
^
$string = "Onun Mesajı";
echo preg_replace("~\w+\s*$~u", '<span>$0</span>', $string);
此外,您需要的正则表达式只是\w+\s*$
:
\w+
- 一个或多个字母数字\s*
- 0个或更多空格(尾随)$
- 字符串结尾由于我从正则表达式中删除了\W
,因此无需&#34;硬编码&#34;替换字符串中的前导空格(也被移除)。
答案 1 :(得分:1)
您应该使用正则表达式的u
修饰符将引擎设置为unicode模式:
<?php
$subject = "Onun äöüß Mesajı";
$pattern = '/\w+\s*?$/u';
echo preg_replace($pattern, '<span>\\0</span>', $subject);
输出结果为:
Onun äöüß <span>Mesajı</span>
答案 2 :(得分:0)
这个正则表达式可以帮到你,并且比其他解决方案短得多:
[ ](.*?$)
以下是一个例子:
$string = "Onun Mes*ÇŞĞÜÖİçşğüöıajı";
echo preg_replace('~[ ](.*?$)~', ' <span>' .'${1}'. '</span>', $string);
将回应:
Onun <span>Mes*ÇŞĞÜÖİçşğüöıajı</span>
这个正则表达式的工作方式是我们在惰性模式[ ].*?
中查找没有空格的任何字符。
然后我们添加$
标识符,因此它匹配字符串的结尾。