首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >preg_replace unicode字符

preg_replace unicode字符
EN

Stack Overflow用户
提问于 2018-01-19 01:20:53
回答 1查看 1.2K关注 0票数 0

我有几个包含unicode的字符串。我的任务是从这些字符串中删除除unicode以外的所有内容,例如,下面

代码语言:javascript
复制
\ud83d\ude82 + \u2600\ufe0f = \ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29

会变成

代码语言:javascript
复制
\ud83d\ude82 \u2600\ufe0f \ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29

然后,我需要查找重复的代码,并将它们分开,以便:

代码语言:javascript
复制
 \ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29

变成:

代码语言:javascript
复制
\ud83d\ude29 \ud83d\ude29 \ud83d\ude29 \ud83d\ude29 \ud83d\ude29

对于第一个位,我尝试过几种preg_match解决方案,但它要么不从字符串中删除任何字符,要么删除所有的字符。以下是最新的尝试,

代码语言:javascript
复制
/(^\\\u[0-9a-f]{4})+/

由于不太熟悉Regex,我开始在困惑中挠头,因为我不确定还能尝试什么。

最终,我可以将每个unicode作为自己的记录插入到数据库中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-19 13:04:41

这可以分两个步骤进行:

代码语言:javascript
复制
$str = '\ud83d\ude82 + \u2600\ufe0f = \ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29\ud83d\ude29';
// remove non unicode character
$str = preg_replace('/(?<=\\\\u[a-f0-9]{4})[^\\\\]+/', '', $str);
// insert space between repeated pair
$str = preg_replace('/((?:\\\u[a-f0-9]{4}){2})(?=\1)/', '$1 ', $str);
echo $str,"\n";

输出:

代码语言:javascript
复制
\ud83d\ude82\u2600\ufe0f\ud83d\ude29 \ud83d\ude29 \ud83d\ude29 \ud83d\ude29 \ud83d\ude29

Regex #1:

代码语言:javascript
复制
/                       : regex delimiter
  (?<=                  : lookahead
    \\\\u[a-f0-9]{4}    : unicode character
  )                     : end lookahead
  [^\\\\]+              : 1 or more any character that is NOT a backslash
/                       : regex delimiter

Regex #2:

代码语言:javascript
复制
/                       : regex delimiter
  (                     : start group 1
    (?:                 : non capture group
      \\\\u[a-f0-9]{4}  : a unicode character
    ){2}                : appears twice (2 unicode characters)
  )                     : end group 1
  (?=\1)                : lookahead, group 1 is repeated
/                       : regex delimiter
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48332803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档