在正则表达式比赛中坚持一个新案例...... 我有一个包含单词,#hashtgs,@ useranmes和其他misc字符的字符串。
一些例子,因为它们变得更加混乱和混乱。 “我的新车”通常是可选的,并且不会存在,因为这是一个preg替换,我将以空字符串结束,在我的情况下,这是可取的。但是,如果“我的新车”确实存在,那将是所需的字符串
期望的结果: 我的新车 我的新车 我的新车 我的新车 5.我的新车
我在(^|\s)[#@](\w+)
做得非常好,然后表情符号以及有趣的方块came发挥作用,表现为\ ue412 \ ue412
我想我只需要找到一种方法来说明是否以\ remove开头到最后。我想要走另一条道路,否定任何不是[a-zA-Z0-9]的东西,但这也是多语言。
有什么建议吗?
答案 0 :(得分:0)
试试这个:
(?:[#@]\S+|\\\S+)
适用于所有示例,包括“凌乱”的示例。
答案 1 :(得分:0)
json_decode
函数会将ascii转义序列转换为实际的utf-8 unicode字符。
$t = "My New Car #wheels #car \ud83d\ude2d\ud83d\ude2d\ud83d\ude2d\ud83d\ude02";
$s = json_decode("\"$t\"");
var_dump($s);
输出:
string(40) "My New Car #wheels #car "
要考虑preg_replace
中的这些字符,您需要打开/u
unicode标志
$r = preg_replace("/\s*([#@]\S+|[^\\x00-\\xff])\s*/u", "", $s);
var_dump($r);
输出:
string(10) "My New Car"
0-127(十六进制00-ff)中的\x
转义码与ascii字符匹配。高于\xff
的任何东西都是utf-8字符。