匹配符#
符号 | 意思 |
---|
? | 0个或1个 |
+ | 1个或多个 |
* | 0个或多个 |
. | 除换行符\n之外的任何单字符 |
^ | 开始符,在方括号内容使用是取反的意思 |
$ | 结束符 |
() | 子表达式,匹配整体:123 |
[] | 子表达式,逐个匹配:1、2、3 |
\ | 转义字符 |
{} | 限定表达式 |
{n,m} | 满足条件且长度为n~m的字符串,{n}匹配n次,{n,}匹配至少n次 |
[^abc] | 取反,匹配除了a、b、c之外的其它内容 |
[a-z] | 区间,匹配a~z的所有字母,还有[0-9]、[A-Z]等 |
. | 匹配除了换行之外的所有字符,等同于[^\n\r] |
| | 多个选择一个 |
[\s\S] | 匹配所有但不包括换行,\s所有空白符,等价于[\f\n\r\t\v]。\S所有非空白符,等价于[^\f\n\r\t\v]。 |
\w | 匹配字母、数字、下划线。等价于 [A-Za-z0-9_] |
\f | 换页符,等价于\x0c和\cL |
\n | 换行符,等价于\x0a和\cJ |
\r | 回车符,等价于\x0d和\cM |
\t | 制表符,等价于\x09和\cI |
\v | 垂直制表符,等价于\x0b和\cK |
修饰符#
修饰符 | 含义 |
---|
g | global - 全局匹配 |
i | ignore - 不区分大小写 |
m | multi line - 多行匹配,尤其是有^和$边界符时 |
s | 特殊字符圆点 . 中包含换行符 \n |
u | Unicode,匹配Unicode字符 |
不同语言#
语言 | . | [] | ^ | $ | () | {} | ? | + | | | () |
---|
javascript | √ | √ | √ | √ | √ | | √ | √ | √ | √ |
php | √ | √ | √ | √ | √ | | | | | |
python | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
java | √ | √ | √ | √ | √ | √ | √ | √ | √ | √ |
PHP处理emoji#
1、emoji保存到数据库中:将emoji的Unicode以json格式存在数据库中
$emoji_matched = preg_match_all('/./u', $content, $emoji_matches);//以Unicode格式匹配所有字符
if ($emoji_matched) {
foreach ($emoji_matches[0] as $e) {
if (strlen($e) >= 4) {//字符长度>=4是为emoji
$content = str_replace($e, json_encode($e), $content);
}
}
}
2、从数据库中读取后回显为emoji
$content = htmlspecialchars_decode($post['post_content']);
$matched = preg_match_all('/("\\\u).+?(")/', $content, $matches, PREG_SET_ORDER);
if ($matched) {
foreach ($matches as $m) {
$content = str_replace($m[0], json_decode($m[0]), $content);
}
}
Javascript匹配emoji#
// Match almost all emoji
const str = "Hello 😃 😄";
const regexExp = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gi;
regexExp.test(str);// true